293
12
장
트랜잭션
12.2.2
트랜잭션 종료
트랜잭션이 시작되면
start
transaction
명령어를 통해 명시적으로, 또는 데이터베이스 서
버에 의해 암시적으로 트랜잭션을 종료해야 변경 사항이 영구 적용됩니다.
commit
명령어를
사용해서 서버가 변경 사항을 영구적으로 적용하고 트랜잭션 중에 사용된 모든 리소스 (페이지
또는 행 잠금 등 )를 해제하도록 지시합니다.
트랜잭션 시작 이후의 모든 변경 사항을 실행 취소하려면
rollback
명령어를 실행해서 데이
터를 트랜잭션 전 상태로 되돌리도록 서버에 지시해야 합니다. 롤백이 완료되면 세션에서 사용
된 모든 리소스가 해제됩니다.
commit
또는
rollback
명령어를 실행했을 때뿐만 아니라 다른 작업의 간접적인 결과로 또는
제어할 수 없는 어떤 이유로 트랜잭션이 종료될 수 있는 몇 가지 시나리오가 있습니다.
●
서버가 종료되고 서버가 재시작되면서 트랜잭션이 자동으로 롤백됩니다.
●
alter table
과 같은
SQL
스키마 문을 실행하면 현재 트랜잭션이 커밋되고 새로운 트랜잭션이 시작
됩니다.
●
다른
start transaction
명령어를 실행하면 이전 트랜잭션이 커밋됩니다.
●
서버가
교착 상태
deadlock
를 감지했을 때 해당 트랜잭션이 원인이라고 판단되면 서버는 트랜잭션을 조기
종료합니다. 이 경우 트랜잭션이 롤백되고 오류 메시지가 표시됩니다.
이 네 가지 시나리오 중 첫 번째와 세 번째는 매우 간단하지만 다른 두 가지 시나리오는 좀더
알아볼 필요가 있습니다. ...