본문 바로가기
Database/Oracle

[ORACLE] LOCK TABLE() 문법부터 예제까지 한눈에 이해하기

by Papa Martino V 2025. 6. 9.
728x90

오라클 LOCK TABLE() 문법부터 예제까지 한눈에 이해하기
[Oracle] LOCK TABLE

 

1. LOCK TABLE이란?

LOCK TABLE은 Oracle에서 하나 이상의 테이블에 대해 명시적으로 잠금을 설정하여 동시성 문제를 방지하는 SQL 문입니다. 이 명령은 주로 트랜잭션 처리 중 데이터 일관성과 충돌 방지를 위해 사용됩니다.

2. LOCK TABLE 기본 문법

LOCK TABLE 테이블명 IN [락 모드] MODE [NOWAIT | WAIT n];

락 모드 예시: ROW SHARE, ROW EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE

3. 자주 사용하는 LOCK 모드 설명

LOCK 모드 설명 공용? 주 용도
ROW SHARE 동시 읽기/쓰기 가능, SELECT ... FOR UPDATE와 유사 공용 트랜잭션 시작 알림
ROW EXCLUSIVE INSERT/UPDATE/DELETE 실행 시 자동 단독 행 변경 작업
SHARE 읽기 전용, 다른 공유 잠금 허용 공용 동시 조회
SHARE ROW EXCLUSIVE 공유 + 단독 권한, 다소 제한적 제한적 혼합 작업
EXCLUSIVE 읽기, 쓰기 모두 배제 단독 전체 테이블 독점

4. 실전 예제: 단일 테이블 잠금

LOCK TABLE employees IN ROW EXCLUSIVE MODE;
-- employees 테이블에 대해 다른 트랜잭션의 DML을 차단하지 않음

5. NOWAIT과 WAIT 옵션

LOCK TABLE employees IN EXCLUSIVE MODE NOWAIT;

NOWAIT: 잠금을 기다리지 않고 즉시 오류 반환

LOCK TABLE employees IN EXCLUSIVE MODE WAIT 10;

WAIT: 10초간 잠금 대기 후 실패 시 오류 반환

6. 여러 테이블 동시 잠금

LOCK TABLE employees, departments IN SHARE MODE;

여러 테이블을 동시에 잠금 처리 가능하며, 트랜잭션 단위로 유지됩니다.

7. LOCK TABLE과 트랜잭션 관계

LOCK TABLE 문은 COMMIT 또는 ROLLBACK이 발생할 때까지 유지됩니다. 따라서 잠금 후 트랜잭션 처리가 완료되어야 잠금이 해제됩니다.

8. 실무 활용 예: 대량 처리 시 충돌 방지

BEGIN
  LOCK TABLE sales_data IN EXCLUSIVE MODE;
  DELETE FROM sales_data WHERE sale_date < SYSDATE - 365;
  COMMIT;
END;
/

오래된 판매 데이터를 삭제하기 전에 LOCK을 걸어 다른 트랜잭션과의 충돌을 방지합니다.

9. LOCK 상태 확인 방법

SELECT object_name, session_id, locked_mode
FROM v$locked_object a, dba_objects b
WHERE a.object_id = b.object_id;

현재 세션 및 객체별 LOCK 정보를 조회할 수 있습니다.

10. 주의사항

  • 잠금 시간 과도 시 성능 저하 및 데드락 위험 존재
  • 불필요한 EXCLUSIVE MODE 사용 자제
  • 트랜잭션 커밋 누락 시 잠금 지속으로 장애 유발
  • 분산 트랜잭션과 함께 사용할 경우 조심

11. LOCK 관련 시스템 뷰

  • DBA_BLOCKERS: 잠금을 유발하는 세션
  • DBA_WAITERS: 잠금을 기다리는 세션
  • V$LOCK: 모든 세션의 LOCK 정보
  • DBA_DML_LOCKS: DML 관련 잠금 정보

12. 결론

Oracle의 LOCK TABLE은 동시성 제어, 데이터 일관성 보장, 트랜잭션 충돌 방지를 위한 핵심 도구입니다. 하지만 잘못 사용하면 시스템 병목과 데드락을 유발할 수 있으므로, 필요한 경우에만 신중히 적용하고 항상 트랜잭션과 함께 적절히 관리해야 합니다.

출처

  • Oracle 공식 문서: https://docs.oracle.com/en/database/
  • Oracle Database Concepts & PL/SQL - Steven Feuerstein 외
  • 실무 중심 Oracle 트랜잭션과 동시성 관리 - 이현석 저
728x90