DB/Oracle DB(SQL)

[Oracle] 트랜잭션과 락(Transaction And Lock)

동그리담 2024. 1. 30. 14:09

트랜잭션(Transaction)

  • 정의
    • 반드시 함께 실행 돼야할 작업의 단위
  • 특성 
    • 원자성(Aotomlcity)
      • 트랜잭션은 최소의 작업 단위로서 전체가 처리되거나 취소될 수 있지만 일부만 처리될 수 없다
    • 일관성(Consistency)
      • 트랜잭션이 실행된 이후 데이터베이스의 무결성은 반드지 유지돼야 한다
    • 독립성(lsolation)
      • 트랜잭션을 여러 개 동시에 실행하더라도 각각의 트랜잭션은 서로 영향을 줄 수 없다.
      • 즉 실행되지 않은 트랜잭션의 결과는 다른 트랜잭션에서 참조하는 것이 불가능하다.
    • 영속성(Durabllity)
      • 종료된 트랜잭션의 결과는 반드시 데이터베이스에 반영돼야 한다.

트랜잭션의 시작과 종료

  • 시작
    • 이전 트랜잭션이 종료된 이후 DML, DDL, DCL 문장에 실행됏을 떄
  • 종료
    • COOMIT이나 ROOLBACK 명령이 실행 될 때
    • DDL이나 DCL문장의 실행이 완료됫을 때
    • 사용자의 정상 종료 시
    • 데드락(Deadlock)이 걸리면 트랜잭션의 일부만 종료
  • 트랜잭션은 하나의 세션에서 단지 하나만 시작할 수 있으며 DML인 경우 반드시 COMMIT이나 ROLLBACK으로 종료하지만 DDL이나 DCL의 경우 문장의 실행이 완료되면 자동으로 종료된다. 오라클은 SAVE POINT명령을 이용해서 트랜잭션의 과정을 제어할 수 있다.
용어 설명
DML Database Manipulation Language[데이터 조작어] - SELECT(조회), INSERT(삽입), UPDATE(수정), DELETE(삭제)
테이블에 있는 행과 열을 조작하는 언어 (데이터베이스 사용자)
DDL Data Definition Language[데이터 정의어] - CREATE(생성), ALTER(수정), DROP(삭제),TRUNCATE(초기화)
데이터를 생성하거나 수정, 삭제 등 데이터의 전체 골격을 결정하는 언어 (데이터베이스 생성자)
DCL Data Control Language[데이터 제어어] - GRANT(권한부여), REVOKE(권한삭제), COMMIT(작업완료), ROLLBACK(비정상 종료, 복구)
더이터베이스에 접근하거나 객체에 권한을 주는 등의 역할 (데이터베이스 관리자)
Deadlock 교착 상태 - 여러 개의 트랜잭션들이 실행 되지 못하고 서로 무한정 기다리는 상태
SAVE POINT 저장점 -  이것을 이용하면 ROLLBACK을 수행할때 전체를 복구하는 것이 아닌 저장점까지만 복구

트랜잭션과 언두 세그먼트(Undo segment)

  • 트랜잭션과 DML 데이터
    • INSERT등의 DML 작업이 실행되면 즉시 테이블에 적용된다.
    • 변경된 행에는 특정 잠금(Excluslv lock)이 발생한다.
    • 해당 테이블에는 공유 잠금 (Share lock)이 발생한다.
    • 트랜잭션이 종료된다 잠금이 해제된다.
  • 언두 세그먼트(UNDO SEGMENT)
    • 트랜잭션이 실행 될 떄 이전 이미지를 저장
    • Rollback을 위해 트랜잭션이 수행되는 동안 이전 정보를 저장
  • 세그먼트(SEGMENT)
    • 물리적인 저장 영역을 가진 오브젝트를 의미
    • 테이블, 인덱스 등 저장 영역에 공간을 할당 받는 오브젝트를 의미

  1. undo segment 결정
  2. 5 undo seg에 저장
  3. 7 테이블에 저장
  4. 행에 독점 잠금
  5. 테이블에 공유 잠금
  6.  COMMIT : 7 영구저장 (잠금해제)
  7. ROLLBACK : 5 복원 (잠금해제)