오라클 Lock

2025. 2. 16. 00:13IT/Oracle

반응형

Oracle 데이터베이스에서 락(Lock)은 동시성 제어를 위해 사용되는 메커니즘으로, 여러 사용자가 동일한 데이터에 동시에 접근할 때 데이터의 일관성과 무결성을 보장합니다. 락은 주로 트랜잭션이 동시에 발생할 때 데이터 충돌을 방지하는 역할을 합니다.

Oracle 락(LOCK) 정의

  • 락(Lock)은 다중 사용자 환경에서 데이터의 무결성을 보장하기 위해 데이터베이스 객체(테이블, 행 등)에 설정하는 메커니즘입니다
  • 데이터 변경 중 다른 사용자가 해당 데이터에 접근하거나 변경하지 못하도록 제한합니다.
  • DML, DDL, 동시성 제어, 트랜잭션 관리 시 필수적으로 사용됩니다.

Oracle 락의 종류 및 특징

A. 락 범위에 따른 분류
1. Row-Level Lock (행 단위 락)

  • 특징: 테이블의 특정 행(Row)에만 락이 걸림.
    • 사용 시점: SELECT ... FOR UPDATE, INSERT, UPDATE, DELETE 수행 시 자동 적용.
    • 장점: 락의 범위가 작아 병렬 처리 효율이 높음.
    • 단점: 많은 행에 락이 걸리면 성능 저하 발생 가능.

2. Table-Level Lock (테이블 단위 락)

  • 특징: 테이블 전체에 락을 설정.
  • 사용 시점: LOCK TABLE ... IN [MODE] 명령어로 설정.
  • 장점: 단순한 데이터 보호가 필요할 때 유용.
  • 단점: 병렬 처리 성능 저하 가능.

System-Level Lock (시스템 단위 락)

• 특징: 데이터베이스 전체나 시스템 전반에 락을 설정.
• 사용 시점: 주로 Oracle 내부적으로 사용.
• 예: DDL 작업 중 SCN(System Change Number) 보호.

🔸 B. 락 모드(모드)에 따른 분류
1. DML Lock (Data Manipulation Language Lock)
• 특징: INSERT, UPDATE, DELETE와 같은 DML 문장 실행 시 생성.
• Row-Level Lock과 Table-Level Lock을 포함.
• 예: SELECT ... FOR UPDATE
2. DDL Lock (Data Definition Language Lock)
• 특징: CREATE, ALTER, DROP 같은 DDL 문장 실행 시 생성.
• DDL 작업 중 객체를 보호하여 구조 변경 충돌 방지.
• 예: ALTER TABLE 수행 시 테이블 구조 변경 중 데이터 접근 차단.
3. Internal Lock (내부 락)
• 특징: Oracle 내부에서 관리하는 락.
• 데이터 무결성과 성능 최적화를 위한 내부 제어 목적.
• 예: TX, TM, UL 락 등.

🔸 C. 락 강도(모드)에 따른 분류
1. Shared Lock (공유 락, S-LOCK)
• 특징: 여러 사용자가 동시에 읽기(Read) 가능하지만, 쓰기(Write)는 불가.
• 사용 예: SELECT ... FOR UPDATE
• 목적: 데이터 조회 시 일관성 유지.
2. Exclusive Lock (배타적 락, X-LOCK)
• 특징: 하나의 세션만 데이터에 접근 가능(읽기/쓰기 모두 독점).
• 사용 예: UPDATE, DELETE
• 목적: 데이터 변경 시 동시성 충돌 방지.
3. Intent Lock (의도적 락)
• 특징: 상위 객체에 락이 있음을 알리는 목적의 락.
• 사용 예: 테이블에 Intent Exclusive Lock을 설정하면 행에 Row-Level Lock 설정 가능.
4. Null Lock (N-LOCK)
• 특징: 락은 설정하지만, 다른 락과 충돌하지 않음.
• 사용 예: Oracle 병렬 처리 또는 권한 확인 시 사용.

⚠️ 3. 락 충돌(Deadlock) 주의사항
• Deadlock(교착상태): 서로 다른 트랜잭션이 서로가 필요로 하는 리소스를 점유한 채 무한 대기 상태에 빠지는 현상.
• Oracle Deadlock 방지 전략:
• 트랜잭션 설계 시 접근 순서 일관성 유지.
• 불필요한 락 최소화.
• DBMS_LOCK 패키지 활용 시 주의.

🛠️ 4. 주요 Oracle 락 뷰 및 관리
• v$lock: 현재 설정된 락 정보 조회.
• dba_locks: 데이터베이스 전체 락 상태 확인.
• dba_blockers: 락을 보유하고 있는 세션 확인.
• dba_waiters: 락을 기다리고 있는 세션 확인.

예제 쿼리:

SELECT sid, id1, id2, lmode, request, type
FROM v$lock;

• lmode: 현재 락 모드 (0: 없음, 6: Exclusive Lock)
• request: 요청 중인 락 모드

Oracle 락은 동시성과 데이터 무결성을 보장하는 핵심 메커니즘이지만, 잘못 사용하면 성능 저하나 교착 상태를 초래할 수 있습니다. 트랜잭션 관리 전략을 명확히 설계하고 락 모니터링을 통해 문제를 사전에 예방하는 것이 중요합니다.

반응형