Database/SQL

트랜잭션은 언제 시작되고 언제 종료되는가? (트랜잭션 시작 시점과 종료 시점)

JaeHoney 2022. 5. 2. 08:41

트랜잭션(Transaction) 종료 시점

"트랜잭션은 언제 종료되는가"에 대해 알아보자.

 

먼저 트랜잭션의 종료 시점을 알아보기에 앞서 시작 시점을 먼저 알아보자!

 

트랜잭션이 자동으로 시작되는 시점은 아래와 같다.

  • DML(INSERT, UPDATE, DELETE) 문장이 실행되는 경우
  • DDL(CREATE, ALTER, DROP) 문장이 실행되는 경우
  • DCL(GRANT, REVOKE) 문장이 실행되는 경우

 

트랜잭션은 아래와 같은 상황에 자동으로 종료 된다.

  • COMMIT, ROLLBACK 문을 실행한 경우
  • DDL 또는 DCL 문 실행
  • 기계 장애 또는 시스템 충돌(crash)
  • deadlock 발생
  • 강제 종료

 

DDL(Create, Alter, Drop, Truncate) 또는 DCL(Grant, Revoke)문이 실행될 때는 암시적으로 Auto Commit을 진행한다. 

 

DBMS를 강제로 종료하거나 트랜잭션이 성공할 수 없게 되는 시스템 장애나 하나 이상의 오류가 발생하면 Auto Rollback이 실행되어서 트랜잭션이 종료된다.

TCL(COMMIT, ROLLBACK, SAVEPOINT)

Commit이 발생하면 데이터에 일어나는 일이다.

  • 데이터베이스(실제 디스크)에 데이터를 영구적으로 변경
  • 데이터의 이전 상태는 완전히 상실
  • 변경된 레코드의 LOCK이 해제되고 다른 사용자가 변경할 수 있다.
  • 모든 Savepoint가 제거 된다.

 

Rallback이 발생하면 데이터에 일어나는 일이다.

  • 트랜잭션이 수행한 결과를 원래의 상태로 복구
  • 변경된 레코드의 LOCK이 해제되고 다른 사용자가 변경할 수 있다.
  • ROLLBACK TO point1; 명령어를 통해 특정 Savepoint까지 롤백이 가능하다.

 

SavePoint가 발생하면 데이터에 일어나는 일이다.

  • 현재 트랜잭션 내에 저장점을 만든다.
  • Commit이 실행되어야 저장점이 반영된다.

 

 


Reference