Oracle

오라클 락 해제 방법 - LOCK 개체 확인

긋대디 2021. 10. 4. 22:39

오라클 디비에서 락이 걸리는 이유는 다양합니다.

누군가 sql 실행 중 Commit을 안 했다던지, 배치가 실행 중이라던지 등등

 

Truncate 같은 명령은 ORA-00054라는 에러라도 출력하지만...

DML(Delete) 문장 실행 시 그냥 멈쳐버립니다.


오라클 재시작!!! 
하면 간단하게 처리됩니다만.--^^;

하지만 DB 특성상 재시작 할 수 없는 경우가 많죠~
그때는 Lock 걸린 세션을 찾아서.. 

Kill 해주면 됩니다.

※ 아래 작업은 사용자 계정으로는 조회가 안되니 관리자 권한으로 하여야 합니다. 
    (SYSTEM 계정으로 로그인)

 

1. 먼저, TABLE의 LOCK(락) 객체 검색
SELECT   A.SID
       , A.SERIAL#
       , C.OBJECT_NAME
       , A.SID || ', ' || A.SERIAL# AS KILL_JOB
FROM V$SESSION A, V$LOCK B, DBA_OBJECTS C
WHERE A.SID = B.SID
  AND B.ID1 = C.OBJECT_ID
  AND B.TYPE = 'TM'
--  AND C.OBJECT_NAME = 'JAMES_MAIL' -- 해당 테이블이 있으면 지정할 수 있다.
;

 

위의 실행결과 세션 값

SID      SERIAL#
------- ----------
2715     40427

 

2. 실행 결과에 따른 세션 죽이기 ( KILL SESSION)
# Kill은 이렇게...
alter system kill session '2715,40427';

 

이렇게 찾아지면 죽일 수 있습니다.

수고하셨습니다.~~