10. TCL

jedo5000·2023년 11월 23일
0

DataBase

목록 보기
10/13

10.TCL이란?


10.1 TCL

  • TCL (Transaction Control Language): 트랜잭션 제어를 담당
    Transcation: “쪼갤 수 없는 업무 처리의 최소 단위”, 데이터베이스에서는 상태를 변화시키기 위해 수행하는 작업의 단위

10.2 Transaction 이해하기

실제로 은행에서 트랜잭션 수행하는 과정이 어떻게 이루어 지는지 예시로 확인해보자!

1. 김민수라는 사람의 A계좌가 존재하는지 확인 →
 SELECT 이름 FROM 계좌정보 WHERE 이름 = ‘김민수’ AND 계좌번호 = ‘A계좌’ ;
2. 김영희라는 사람의 B계좌가 존재하는지 확인 →
 SELECT 이름 FROM 계좌정보 WHERE 이름 = ‘김영희’ AND 계좌번호 = ‘B계좌’ ;
3. 김민수의 A계좌에 잔액이 일백만원 이상인지 확인 →
 SELECT 잔액 FROM 계좌정보 WHERE 계좌번호 = ‘A계좌’ AND 잔액 >= 1,000,000 ;
4. 김민수의 A계좌 잔액에서 일백만원을 차감 →
 UPDATE 계좌정보 SET 잔액 = 잔액 -1,000,000 WHERE 계좌번호 = ‘A계좌’ ;
5. 김영희의 B계좌 잔액에서 일백만원을 추가 →
 UPDATE 계좌정보 SET 잔액 = 잔액+1,000,000 WHERE 계좌번호 = ‘B계좌’ ;
6. 송금 업무가 완료 → COMMIT; 
  • 송금을 위한 트랜잭션이 정상 처리되면 데이터를 영구 반영하기
    위해 COMMIT을 한다.
    하지만 만약 트랜잭션 도중에 오류가 발생한다면 위 트랜잭션이 취소되어야한다.

3. 김민수의 A계좌에 잔액이 일백만원 이상인지 확인
→ SELECT 잔액 FROM 계좌정보 WHERE 계좌번호 = ‘A계좌’ AND 잔액 >= 1,000,000 ;

하나라도 오류가 발생한다면 이전에 했던 모든 활동을 ROLLBACK해야한다.ROLLBACK;

10.3 COMMIT / ROLLBACK

COMMIT ;
→ 마지막 COMMIT 시점 이후 실행한 트랜잭션 결과를 데이터베이스에 영구 저장
ROLLBACK ;
→ 실행한 트랜잭션 결과에 대해서 실행하기 전 상태로 원상복구
→ 마지막으로 COMMIT 한 시점까지만 ROLLBACK 가능
보통 DML (UPDATE , INSERT ,DELETE) 한 대상은 바로 테이블에
영구 반영되는 것이 아니므로 COMMIT 을 명시해야 반영

  • 변경을 가한 세션에서는 데이터 내용이 변경된 것처럼 보이지만 아직 데이터베이스에 영구반영 된 것이 아니기 때문에(COMMIT 이전) 다른 세션에서는 이전 값 출력

  • ROLLBACK은 내가 작업한 내용을 되돌리는 것이므로 다른 세션에서 확인 X
    만약, COMMIT을 해버리면 되돌릴 수 없으므로 트랜잭션 순서를 거슬러 올라가며 데이터 복구

10.4 SAVEPOINT

  • SAVEPOINT : ROLLBACK 명령어에 대해 특정 지점까지만 복구하도록 조절

10.5 LOCK

  • LOCK은 둘 이상의 세션이 똑같은 행을 조작하려고 할 때 충돌하는 현상 (베타 LOCK)
    서로 다른 행을 조작한다면 LOCK이 발생하지 않으니 괜찮지만, DML 작업 시 미리 협의하는 것이 중요

그럼에도 불구하고 LOCK에 걸렸다면?
→ 트랜잭션이 작업을 진행하지 못하고 멈추는 현상 발생 (BLOCKING)

LOCK 해제방법
1. 원인이 되는 세션에서 COMMIT 혹은 ROLLBACK 을 실행 (LOCK = 자물쇠 , COMMIT/ROLLBACK = 열쇠)
2. DBA 에게 가서 LOCK을 풀어달라고 요청
3. LOCK 및 세션의 KILL 방법을 조회해 직접 세션 kill 실행
→ 이런 경합은 성능에 좋지 않으니 최소화!

0개의 댓글