SQL 기본 및 활용-4.TCL

hoon·2024년 11월 14일
0

sqld

목록 보기
7/10

TLC

트랜잭션(Transaction)

  • 데이터베이스의 논리적 연산 단위로, 의미적으로 분할할 수 없는 최소의 단위
  • 일반적으로 하나의 트랜잭션은 여러 SQL 문장을 포함함
  • 성공 시 모든 연산을 반영하고, 취소 시 모든 연산을 취소함 (All or Nothing)

트랜잭션의 예

  1. 도서 주문

    • 재고 수량 감소, 주문 내역 생성, 결제, 포인트 적립
  2. 계좌 이체

    • 원 계좌의 잔액 감소, 다른 계좌의 잔액 증가
  3. 교통카드 충전

    • 잔액 증가, 결제

트랜잭션의 특성 (ACID 특성)

특성설명
원자성 (Atomicity)트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되든지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다. (All or Nothing)
일관성 (Consistency)트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못되지 않았다면, 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있어서는 안 된다.
고립성 (Isolation)트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아서는 안 된다.
지속성 (Durability)트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.

추가 설명

  • 트랜잭션의 ACID 특성을 보장하기 위해 DBMS는 동시성 제어 (Concurrency Control)를 수행
    • Lock 기반, Timestamp 기반 등 다양한 동시성 제어 기법이 사용됨

COMMIT 실행 전 상태

UPDATE PLAYER SET HEIGHT = HEIGHT + 10;
  • 변경된 내용은 메모리에 임시로 저장됨
  • 현재 사용자는 증가한 HEIGHT 값을 읽을 수 있음
  • 다른 사용자는 증가 전 HEIGHT 값만 읽을 수 있음
  • HEIGHT에는 잠금(Locking)이 설정되어 다른 사용자는 값을 변경할 수 없음

COMMIT 실행 후

COMMIT;
  • 변경된 내용은 DB에 영구적으로 저장됨
  • 변경 내용을 모든 다른 사용자가 볼 수 있음
  • 이전 데이터는 모두 사라짐 (별도의 로그 보관 시 복구 가능)
  • 관련된 행에 대한 잠금이 해제되어 모든 사용자가 변경할 수 있음

트랜잭션을 제어하기 위한 명령어

  • COMMIT: 변경된 내용을 DB에 영구적으로 반영
  • ROLLBACK:
    • 기본: 변경된 내용을 버리고 마지막 COMMIT 상태로 복귀
    • SAVEPOINT를 지정한 경우, 지정한 저장점까지 부분 복구
      • SAVEPOINT: 부분 복귀를 위해 지정한 저장점

트랜잭션 자동 시작 및 종료

  • 트랜잭션은 SQL문 실행 시 자동 시작되고, COMMIT이나 ROLLBACK을 통해 명시적 종료됨.

자동 커밋 / 자동 롤백

  • 자동 커밋:
    • DDL문장 수행 시, DDL 수행 전에 자동으로 커밋 (auto commit)
    • DB를 정상적으로 접속 종료하면 자동 커밋
  • 자동 롤백:
    • 애플리케이션의 이상 종료로 DB와의 접속이 단절되었을 때 자동 롤백

ROLLBACK

ROLLBACK 이후의 데이터 상태

...
COMMIT;

UPDATE PLAYER SET HEIGHT = HEIGHT + 10;
DELETE FROM PLAYER;

ROLLBACK;
  • 변경한 내용이 모두 취소
  • 이전 데이터가 다시 재저장
  • 관련된 행에 대한 잠금이 해제되어 모든 사용자가 데이터를 변경할 수 있음

SAVEPOINT와 ROLLBACK

  • 트랜잭션 도중 특정 위치에 SAVEPOINT를 설정해 부분 복구 가능
    • 예시:
      • ROLLBACK TO A: SAVEPOINT A 위치로 복구
      • ROLLBACK TO B: SAVEPOINT B 위치로 복구
  • SAVEPOINT를 활용하면 트랜잭션 중간에 특정 작업을 저장하여 부분적으로 작업을 취소하거나 복구할 수 있음

SAVEPOINT

  • 미리 지정한 SAVEPOINT까지 ROLLBACK

    • 특정 저장점까지 롤백하면 그 이후의 명령과 저장점은 모두 무효화
  • 일부 툴에서는 지원되지 않을 수 있음

  • 동일 이름으로 여러 저장점을 정의할 경우, 나중에 정의한 저장점이 유효

예시

...
SAVEPOINT PT1;
...
SAVEPOINT PT1;  -- 이전 PT1은 무효화됨
...
SAVEPOINT PT2;
...
ROLLBACK TO PT1;
  • (2)번으로 ROLLBACK 수행 시, (2)번 이후의 모든 명령이 무효화

0개의 댓글