트랜잭션(Transaction)
- 하나의 단위로 수행되길 바라는 쿼리의 묶음
- 논리적인 작업 단위
- 여러 가지 DML작업들을 하나의 단위로 묶어 둔 것
- 해당 트랜잭션 내에 있는 모든 DML이 성공해야 해당 트랜잭션이 성공하는 것이고 만약 1개의 DML이라도 실패하면 전체가 실패하게 된다.
✅ 은행에서 계좌 입,출금(송금)과 같은 개념
은행에서는 송금 자체를 하나의 트랜잭션(거래)로 보고
A통장에서 출금한 돈이 B통장에 정확히 입금히 확인되면 그 때 거래를 성사시키고(commit)
네트워크 장애로 인해 출금만 발생하고 입금이 되지 않았을 경우에는 이를 모두 취소(rollback)하게 된다.
💡 Commit
트랜잭션 내의 작업의 결과를 확정하는 명령어
메모리 상에서 변경된 내용을 데이터 파일에 반영.
💡 Rollback
트랜잭션 내의 모든 명령어들을 취소하는 명령어
메모리 상에서 변경된 내용을 데이터 파일에 반영하지 않고 종료.
트랜잭션 처리란?
💡 ACID 를 유지하는 것!
Atomicity (원자성)
- 모두 반영되도록 완료 또는 전혀 반영되지 않도록 복구한다.
- 논리적인 수행단위가 절대 깨지지 않도록 수행되어야 한다.
Consistency (일관성)
- 트랜잭션의 수행 전과 수행 완료 후의 상태가 같아야 한다.
- 데이터의 결함이 발생하지 않도록 일관성을 유지해야 한다.
Isolation (독립성,격리성,순차성)
- 하나의 트랜잭션 실행 중에 다른 트랜잭션의 연산이 끼어들 수 없다.
Durability (영속성, 지속성)
- 성공적으로 완료된 트랜잭션의 결과는 영구적으로 반영되어야 한다.
- COMMIT 명령어 사용
트랜잭션 상태
활동(Active)
트랜잭션의 수명 주기 중 첫 번째 상태.
실행이 완료 될때까지 Active 상태로 유지된다.
트랜잭션에 의해 변경된 모든 내용이 기본 메모리의 버퍼에 저장된다.
부분 완료(Partially Committed)
트랜잭션의 마지막 연산까지 수행하였고 Commit 연산을 수행하기 직전의 상태.
트랜잭션에 의해 변경된 모든 내용이 기본 메모리의 버퍼에 저장되기 때문에 완전히 Commit된 것으로 간주되지 않는다.
완료(Committed)
트랜잭션을 성공적으로 종료한 상태, Commit 연산을 실행한 이후의 상태
트랜잭션에 의해 수행된 모든 변경 내용이 데이터베이스에 성공적으로 저장되고 나면 Commit상태가 된다.
✔ 트랜잭션이 커밋된 상태로 전환 된 후에는 트랜잭션을 롤백 할 수 없다.
트랜잭션에 의해 수행된 변경 사항을 실행 취소 할 수 없다.
시스템이 새로운 일관된 상태로 업데이트 되기 때문.
변경 사항을 실행 취소 하는 유일한 방법은 역방향 작업을 수행하는 보상 트랜잭션(Compensating Transaction) 이라는 다른 트랜잭션을 수행하는 것이다.
실패(Failed)
트랜잭션 수행 중에 오류가 발생하여 중단 상태.
트랜잭션이 활성 상태 또는 부분적으로 커밋된 상태에서 실행되고 일부 실패가 발생하여 실행을 계속할 수 없게 되면 실패한 상태가 된다.
철회(Aborted)
트랜잭션을 비정상적으로 종료하여 Rollback을 수행한 상태.
트랜잭션에 실패하고 실패한 상태로 전환된 후에는 트랜잭션의 모든 변경 내용을 취소한다.
종료(Terminated)
커밋된 상태 또는 중단 상태로 들어간 후 트랜잭션의 수명 주기가 끝나게 된다.
참고
www.gatevidyalay.com/transaction-states-in-dbms/
ACID 정리에 도움을 준 heestory217.tistory.com/ 💕
'DataBase > Oracle' 카테고리의 다른 글
PL/SQL (3) 트리거 (2) | 2021.03.15 |
---|---|
PL/SQL (2) 저장프로시저, 커서, 함수 (2) | 2021.03.12 |
PL/SQL (1) 개요, 조건문, 반복문, 예제 (2) | 2021.03.10 |