본문 바로가기
Programming/sql

[sql] Oracle DB에서 Table Lock 조회하는 방법

by x-coder 2023. 9. 15.

Hello. { #Somebody }

Oracle DB에서 Table Lock 조회 하는 쿼리

 

DB Table이 Lock 발생 했을 시 어떠한 쿼리때문인지 확인 할 수 있는 SQL 입니다. 

 

-- Lock 조회 쿼리
SELECT S.STATUS "STATUS"
    , S.USER_NAME "USER"
    , O.OWNER || '.' || O.OBJECT_NAME "OBJECT"
    , FLOOR((SYSDATE - VT.START_TIME)*24) || ':' ||
    LPAD(FLOOR(MOD((SYSDATE - VT.START_TIME)*1440,  60)), 2, 0) || ':'
    LPAD(FLOOR(MOD((SYSDATE - VT.START_TIME)*86400, 60)), 2, 0) AS "LOCK_TIME"
    , DECODE(LMODE, 0, '[0]', 1, '[1]ROW-S(RS)', 2, '[2]ROW-X(RX)', 3, '[3]SHARED(S)',
    4, '[4]S/ROW-S(SRX)', 5, '[5]EXCLUSIVE(X)', 6, '[6]PIN', TO_CHAR(LMODE)) "LOCK MODE"
    , NVL(S.SQL_ID, S.PREV_SQL_ID) || '/' || NVL2(S.SQL_ID, S.SQL_CHILD_NUMBER, S.PREV_CHILD_NUMBER) "SQL_ID"
    , SQ.SQL_TEXT
FROM VT_WLOCK L,
    VT_SESSION S,
    DBA_OBJECTS O,
    VT_TRANSACTION VT,
    V$SQL SQ
WHERE L.TYPE = 'WLOCK_DML'
  AND L.SESS_ID = S.VTR_TID
  AND L.ID1 = O.OBJECT_ID (+)
  AND L.SESS_ID = VT.SESS_ID
  AND SQ.SQL_ID = NVL(S.SQL_ID, S.PREV_SQL_ID)
  AND SQ.CHILD_NUMBER = NVL2(S.SQL_ID, S.SQL_CHILD_NUMBER, S.PREV_CHILD_NUMBER)
ORDER BY "LOCK_TIME" DESC
Oracle 혹은 Tibero DB에서 사용가능합니다.

 

 

To become a good developer, you need to study SQL

Bye. { #Somebody }