본문 바로가기
너알나알/오라클[Oracle]

[오라클]테이블 Lock 조회+Session Kill

by ToBeIsFree 2024. 3. 12.

종종 Table에 Lock이 잡혀 있을 경우가 있습니다

특정 사용자가 COMMIT을 하지 않았을 수도, 프로그램 수행 중 어떤 문제로 인하여 Lock이 발생하는 경우도 있습니다

당장 해당 TABLE에 대한 LOCK을 풀지 않으면 업무에 지장이 있을 경우 KILL 해야합니다

 

DB LOCK 조회
SELECT SESSION_ID, OWNER, NAME
  FROM DBA_DML_LOCKS;
SELECT A.SID, A.SERIAL#, B.TYPE, C.OBJECT_NAME, A.MACHINE, A.TERMINAL, A.PROGRAM
-- 어떤PC 및 프로그램에서 Lock이 발생되었는지 확인 가능
 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'

 

※ FOR UPDATE 문을 사용하여 테이블에 Lock을 강제로 발생시켜두고 확인해보시기 바랍니다

V$LOCK 조회
SELECT * 
 FROM V$LOCK 
WHERE TYPE = 'TX'

LMODE <-> REQUEST 를 통해 어느 세션[SID]이 LOCK을 잡고 있는지 확인이 가능합니다

REQUEST = 0 이 현재 잡고 있음

 

V$SESSION 조회
SELECT SID, SERIAL#, OSUSER, PROGRAM
  FROM  V$SESSION
 WHERE SID =  'SESSION_ID'

 

LOCK에 대한 상세정보를 조회 할 수 있습니다 [ 사용자, 장비, 프로그램 등 ]

조회한 SID, SERIAL#을 가지고 SESSION 을 KILL할 수 있습니다

 

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

댓글