본문 바로가기

SQLD/SQL 전문가 가이드

2.1.4 제4절 TCL

1. 트랜잭션 개요

  • 데이터베이스의 논리적 연산단위
  • 분리될 수 없는 한개 이상의 데이터베이스 조작
특성 설명
원자성(Atomicity) 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다.(all or nothing)
일관성(Consistency) 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안 된다.
고립성(Isolation) 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다.
지속성(Durability) 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.

 

 

2. COMMIT

  • 트랜잭션의 완료 처리
  • 데이터 변경 후 COMMIT OR ROLLBACK 전의 데이터 상태는?
    • 단지 메모리 BUFFER에만 영향을 받았기 때문에 데이터의 변경 이전 상태로 복구 가능하다.
    • 현재 사용자는 SELECT 문장으로 결과를 확인 가능하다.
    • 다른 사용자는 현재 사용자가 수행한 명령의 결과를 볼 수 없다.
    • 변경된 행은 잠금(LOCKING)이 설정되어서 다른 사용자가 변경할 수 없다.
  • COMMIT 이후의 데이터 상태는?
    • 데이터에 대한 변경 사항이 데이터베이스에 반영된다.
    • 이전 데이터는 영원히 잃어버리게 된다.
    • 모든 사용자는 결과를 볼 수 있다.
    • 관련된 행에 대한 잠금(LOCKING)이 풀리고, 다른 사용자들이 행을 조작할 수 있게 된다.
  • SQL Server COMMIT
    • 기본으로 DML 수행 시 AUTO COMMIT, 별도의  COMMIT, ROLLBACK 필요없음
    • 트랜잭션 방식
      • AUTO COMMIT
      • 암시적 트랜잭션
      • 명시적 트랜잭션

 3. ROLLBACK

  • COMMIT 이전에 변경 사항을 취소하는 명령어

 

  • COMMIT 과 ROLLBACK으로의 효과
    • 데이터 무결성 보장
    • 영구적인 변경을 하기 전에 데이터의 변경 사항 확인 가능
    • 논리적으로 연관된 작업을 그룹핑하여 처리 가능

 

 4. SAVEPOINT

  • 롤백할 때 트랜잭션에 포함된 전체 작업을 롤백하는 것이 아니라 현 시점에서 SAVEPOINT까지 트랜잭션의 일부만 롤백할 수 있다.
  • 복수의 저장점 정의 가능

 

 

자동으로 COMMIT 되는 경우

  • DDL문장을 실행하면 그 전후 시점에 자동으로 COMMIT
    • DML 문장 이후에 COMMIT 없이 DDL 문장이 실행되면 DDL 수행 전에 자동으로 COMMIT
  • 데이터베이스를 정상적으로 접속을 종료하면 자동으로 트랜잭션이 COMMIT
  • 애플리케이션의 이상 종료로 데이터베이스와의 접속이 단절되었을 때는 트랜잭션이 자동으로 롤
반응형