오라클 데이터베이스에서 락(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;
이와 같이 오라클에서는 다양한 락을 사용하여 동시성을 제어하고 데이터 무결성을 보장합니다. 필요에 따라 적절한 락 전략을 사용하는 것이 중요합니다.
'IT > Oracle' 카테고리의 다른 글
오라클 인덱스 없는 테이블에 빠른 데이터 저장 방법 (0) | 2025.02.22 |
---|---|
CONCAT 함수의 인덱스 수행 여부 (0) | 2025.02.22 |
오라클 실행계획과 통계정보 백업 (1) | 2025.02.20 |
DBMS_JOB 모니터링 (3) | 2025.02.19 |
오라클 테이블 별 용량 확인 SQL 쿼리 (0) | 2025.02.19 |