본문 바로가기
SQL/기초

SQL 정리 9일차 TRANSACTION CONTROL

by 유서담 2023. 8. 29.

9.1 TRANSACTION의 개념

 

- Transaction이란 논리적인 업무의 작업단위를 의미

- Transaction Control LANGUAGE

  • SAVEPOINT
  • COMMIT
  • ROLLBACK [ TO SAVEPOINT명 ]

- Transaction은 다음의 사건들로 구성

  • 데이터에 영구적인 변경을 하는 DML명령어
  • 하나의 DDL명령
  • 하나의 DCL명령

- 최초의 실행가능한 SQL명령으로 시작해서 다음 사건 중 하나로 종료됨

  • COMMIT이나 ROLLBACK
  • DDL이나 DCL 명령 실행( automatic commit )
  • deadlock 등의 error, system crash, exit

 

9.2 TRANSACTION CONTROL

 

명시적인( Explicit ) 트랜잭션 제어 명령어

명령어 설 명
COMMIT 아직 저장되지 않은 모든 데이터 변경 사항을 데이터베이스에 저장하고 현재의 트랜잭션을 종료
SAVEPOINT 이름 현재의 트랜잭션에 savepoint를 지정
ROLLBACK
[ TO SAVEPOINT 이름 ]
아직 저장되지 않은 모든 데이터 변경 사항을 취소하고 현재의 트랜잭션을 종료

 

암시적인( Implicit ) 트랜잭션 제어 명령어

상 태 환 경
자동 COMMIT DDL 명령이나 DCL 명령 실행
COMMIT이나 ROLLBACK을 명시적으로 실행되지 않고
SQL*Plus를 정상적으로 종료
ROLLBACK
[ TO SAVEPOINT 이름 ]
SQL*Plus의 비정상적 종료나 시스템 실패

 

 

9.3 COMMIT, ROLLBACK 이전의 데이터 상태

 

- 단지 buffer에만 영향을 받았기 때문에 데이터의 이전 상태는 복구될 수 있다.

- 현재 사용자는 SELECT문으로 작업의 결과를 확인할 수 있다

- 다른 사용자는 현재 사용자가 수행한 작업의 결과를 볼 수 없다

- 변경된 행은 Lock이 설정되어서 다른 USER가 변경될 수 없다

 

COMMIT후의 데이터 상태

 

- 데이터에 대한 변경사항( After Image )은 데이터베이스에 반영된다

- 이전 데이터는 영원히 잃어버리게 된다

- 모든 사용자는 결과를 볼 수 있다

- 관련된 행에 대한 Lock을 풀리고, 다른 사용자들이 행을 조작할 수 있게 된다

 

 

ROLLBACK후의 데이터 상태

 

- 데이터에 대한 변경사항은 취소된다

- 이전 데이터( Before Image )는 다시 재저장된다

- 관련된 행에 대한 Lock을 풀리고, 다른 사용자들이 행을 조작할 수 있게 된다

 

 

9.4 SAVEPOINT를 이용한 ROLLBACK

 

- SAVEPOINT명령어로 현재의 트랜잭션 중의 위치를 지정할 수 있다

- ROLLBACK TO SAVEPOINT문을 써서 SAVEPOINT까지 ROLLBACK 할 수 있다

 

INSERT ...
SAVEPOINT in_done;
Savepoint created.
UPDATE ...
ROLLBACK TO in_done;
Rollback complete.

'SQL > 기초' 카테고리의 다른 글

SQL 정리 11일차 데이터 정의어(DDL)  (0) 2023.09.01
SQL 정리 10일차 DICTIONARY  (0) 2023.08.30
SQL 정리 8일차 CONSTRAINT  (0) 2023.08.27
SQL 정리 7일차 SubQUERY  (0) 2023.08.25
SQL 정리 6일차 JOIN  (0) 2023.08.16