Oracle 12c 데이터베이스 16 - 트랜잭션, 락

💡 본 글은 ‘실습과 함께하는! 데이터베이스 Oracle 12c’ 강의 내용을 바탕으로 정리하였습니다.

트랜잭션

개념

  • 복수의 SQL 문을 수행하는 도중에 장애가 발생했을 때 장애에 대응할 수 있도록 하는 기능
  • 전체 수행(COMMIT)과 전체 취소(ROLLBACK) 두 가지의 결과값만 가져야 함
  • SAVEPOINT 명령어까지 ROLLBACK 할 수 있음
  • AutoCommit이 되는 경우
    • DDL/DCL 명령문
    • 오라클이 정상 종료된 경우

💡 DML은 자동으로 안 되므로 commit, rollback 명령어로 반영해주어야 함

ACID

  • 원자성(Atomicity)
    • All-or-Nothing
  • 일관성(Consistency)
    • 트랜잭션 전후에 데이터가 손상되면 안 됨
    • 같은 데이터가 다른 값을 가지면 안 됨
  • 고립성/격리수준(Isolation)
    • 여러 개의 트랜잭션이 수행될 때 성능과 데이터 안정성 간의 trade-off
  • 지속성(Durability)
    • 트랜잭션이 종료된 이후에도 데어텡 문제가 없어야 함

로컬 / 글로벌 트랜잭션

로컬 트랜잭션

  • 동일한 시스템 내에서 트랜잭션
  • DBMS가 보장하는 경우가 많음

글로벌 트랜잭션

  • 서로 다른 시스템에서의 트랜잭션 (ex. 서로 다른 은행 간 이체)
  • DBMS 외부의 미들웨어/WAS가 보장

락 (Lock)

  • 여러 트랜잭션이 공유 자원(리소스)에 접근하려고 경쟁할 때 제어하는 방법
    • 동시성 제어(Concurrency Control)라고 하고 보통 Lock으로 해결
    • 프로그래밍에서는 동기화라고 함
  • 일관성과 무결성을 지키기 위해서 적용

Lock Granularity

  • Global Lock
    • 어떤 트랜잭션이 수행 중이면 다른 트랜잭션은 전혀 수행 안 됨
    • 흔하지는 않으며, 일반 데이터베이스 덤프와 같은 특수 경우에 사용
  • Table Lock
    • 동일한 테이블을 다른 트랜잭션이 사용하고 있다면 접근 금지
  • Row Lock
    • 동일한 줄(Row)만 접근 금지
    • 테이블 락에 비해 높은 성능