본문 바로가기

IT/Oracle

유형별 락(Lock)

반응형

오라클 데이터베이스에서 락(Lock)은 여러 트랜잭션이 동일한 데이터에 접근할 때 일관성을 유지하고 데이터 무결성을 보호하기 위한 중요한 메커니즘입니다. 락의 유형을 아래와 같이 정리할 수 있습니다.

DML(Data Manipulation Language) 락

DML 문장이 실행될 때 자동으로 적용되는 락으로, 데이터 무결성을 보장합니다.

Row-level Lock (TX, ROW)
  • 개별 행(Row)에 대한 락
  • SELECT FOR UPDATE 문을 사용하면 명시적으로 설정 가능.
  • 하나의 행을 여러 사용자가 동시에 수정하지 못하도록 함.

Table-level Lock (TM)
  • 테이블 전체에 대한 락
  • 삽입, 수정, 삭제 연산 시 자동으로 설정됨.
  • 특정 트랜잭션이 테이블을 독점적으로 사용할 수 있도록 설정할 수도 있음.

DDL 락

DDL 문장을 실행할 때 자동으로 적용되는 락으로, 스키마 객체의 변경을 보호합니다.

Exclusive DDL Lock
  • ALTER TABLE, DROP TABLE 등 구조 변경 시 발생.
  • 해당 객체를 사용하는 다른 세션이 접근하지 못하게 함.

Shared DDL Lock
  • CREATE INDEX 등에서 발생하며, 테이블을 읽을 수는 있지만 변경은 제한됨.

Concurrency Control 락

오라클의 다중 사용자 동시성을 제어하는 락

Shared Lock (S)
  • 여러 사용자가 동시에 같은 데이터를 읽을 수 있도록 허용.
  • 다른 트랜잭션이 데이터를 수정하지 못하도록 방지.

Exclusive Lock (X)
  • 한 트랜잭션이 데이터를 독점적으로 수정할 수 있도록 함.
  • 다른 트랜잭션이 읽거나 수정할 수 없음.

System-Level 락

시스템 자원과 관련된 락으로, 내부적으로 관리됩니다

Latch
  • 내부 메모리 구조 보호를 위한 경량 락.
  • 매우 짧은 시간 동안 유지되며, 충돌이 발생하면 자동으로 재시도됨.
Mutex
  • Latch보다 더 세밀한 제어가 가능하며, 특정 코드 실행을 보호하기 위한 락.

Deadlock 예방 및  해결

Deadlock
  • 두 개 이상의 트랜잭션이 서로 락을 대기하며 교착 상태에 빠지는 경우.
  • 오라클은 자동으로 탐지하여 한 트랜잭션을 롤백시킴.

해결 방법
  • 트랜잭션 실행 순서를 조정.
  • 락을 걸기 전에 NOWAIT 또는 SKIP LOCKED 옵션 사용.
  • SELECT FOR UPDATE를 사용하여 필요한 리소스를 미리 락.

락 확인 및 관리

현재 락 확인

SELECT * FROM V$LOCK;


세션 정보 확인

SELECT * FROM V$SESSION WHERE SID IN (SELECT SID FROM V$LOCK);


락 해제 (세션 강제 종료)

ALTER SYSTEM KILL SESSION 'SID,SERIAL#' IMMEDIATE;

이와 같이 오라클에서는 다양한 락을 사용하여 동시성을 제어하고 데이터 무결성을 보장합니다. 필요에 따라 적절한 락 전략을 사용하는 것이 중요합니다.

반응형