# 트랜잭션 개념
- 거래
- 다양한 데이터 항목들을 액세스하고 갱신하는 프로그램 수행의 단위
- 논리적인 작업의 단위
- begin transaction과 end transaction 형태의 명령문으로 구분
# 트랜잭션의 특성(ACID 성질)
1. 원자성(Atomictiy)
- 트랜잭션의 모든 연산들이 정상적으로 수행 완료되거나 전혀 어떠한 연산도 수행되지 않은 원래 상태가 되도록 해야 함(all or nothing)
- 오류가 발생하여 트랙잭션의 수행이 성공적으로 완료되지 못했을 경우
- 정상적 상태(commit) or 실패(failure)
- 소프트웨어적인 오류(프로그램 자체 오류)
- 다중 트랜잭션 동시 실행
2. 일관성(Consistency)
- 고립상태에서의 트랜잭션 수행이 데이터베이스의 일관성을 보존하여야 함
- x = A+B 트랜잭션 수행이 끝난 후에도 A+B는 x와 같음(DBMS가 전제)
- 업무 내용(business logic)2 -
- 개발자가 구현(의미적, 논리적)
3. 고립성(Isolation)
- 트랜잭션들의 동시에 실행 결과가 각 트랜잭션이 따로 실행한 결과와 같음(일관성 보존)
- 각 트랜잭션은 시스템에서 다른 트랜잭션이 동시에 수행하고 있는지 모름
- partial DB 읽으면 비일관성 상태 발생 가능(마지막에 실행하면 일관성 보존)
4. 지속성(Durability)
- 트랜잭션이 수행 완료 후 트랜잭션에 의해 데이터베이스에 변경된 내용은 시스템에 오류가 발생해도 지속됨
- 둘 중 한 가지 지키면 지속성 보장
- 1) 트랜잭션에 의해 수행된 갱신이 트랜잭션이 완료되기 전에 데이터베이스에 기록되었음
- 2) 데이터베이스 시스템이 시스템 오류 후 재시작되었을 때, 실패한 트랜잭션의 갱신결과를 다시 만들어 낼 수 있을 만큼 트랜잭션과 디스트에 기록된 갱신에 대한 정보가 충분함
- log에 저장
# 트랜잭션 상태
- 동작(active) : 초기 상태. 트랜잭션이 실행 중
- 부분 카밋(partially committed) : 마지막 명령문이 실행된 후의 상태
- 실패(failed) : 정상적인 실행이 더 이상 진행될 수 없을 때의 상태
- 중단(aborted) : 트랜잭션이 롤백되고 데이터베이스가 트랜잭션 시작 전 상태로 환원되고 난 후의 상태
- 카밋(committed) : 트랜잭션이 성공적으로 완료된 후의 상태
- 카밋된 트랜잭션의 영향을 취소하는 유일한 방법은 보상 트랜잭션(compensating
transaction)을 실행하는 것