Skip to content
sql
-- 持有锁超过10分钟
   SELECT T3.SESS_ID, SF_GET_SCHEMA_NAME_BY_ID (T2.SCHID) 模式, CASE
                    WHEN T2.TYPE$ = 'SCH'
                    THEN '模式'
                    WHEN T2.TYPE$ = 'UR'
                    THEN '用户'
                    WHEN T2.TYPE$ = 'SCHOBJ'
                    THEN '模式内对象'
                    WHEN T2.TYPE$ = 'TABOBJ'
                    THEN '表的下级对象'
                    WHEN T2.TYPE$ = 'DSYNOM'
                    THEN '全局同义词'
                    ELSE T2.TYPE$
          END 对象主类型, CASE
                    WHEN T2.SUBTYPE$ = 'STAB'
                    THEN '系统表'
                    WHEN T2.SUBTYPE$ = 'UTAB'
                    THEN '用户表'
                    WHEN T2.SUBTYPE$ = 'CNTIND'
                    THEN '全文索引'
                    WHEN T2.SUBTYPE$ = 'TRIG'
                    THEN '触发器'
                    WHEN T2.SUBTYPE$ = 'TYPE'
                    THEN '数据类型'
                    WHEN T2.SUBTYPE$ = 'CLASS'
                    THEN '对象类型'
                    ELSE T2.SUBTYPE$
          END 对象子类型, CASE
                    WHEN T1.ROW_IDX = -1
                    THEN '封锁自身'
                    ELSE T2.NAME
          END 对象名, T1.TRX_ID 事务号, T1.TID "TID 锁事务号", T3.SQL_TEXT "SQL", T1.LTYPE 锁类型, T1.LMODE 锁模式, CASE
                    WHEN T1.IGN_FLAG = 0
                    THEN '使用中'
                    WHEN T1.IGN_FLAG = 1
                    THEN '提交未释放'
                    WHEN T1.IGN_FLAG = 2
                    THEN '使用中,另一事务欲申请封锁'
                    WHEN T1.IGN_FLAG = 3
                    THEN '提交未释放,另一事务欲申请封锁'
                    ELSE T1.IGN_FLAG
          END IGN_FLAG, T1.BLOCKED 是否阻塞, T3.LAST_RECV_TIME, T3.APPNAME 应用名, T3.CLNT_HOST 客户端主机名, REPLACE (SUBSTR (T3.CLNT_IP, 1, INSTR (T3.CLNT_IP, ':', -1) - 1), '::FFFF:', '') 客户端IP, T3.OSNAME 客户端操作系统, 'SP_CLOSE_SESSION(' || T3.SESS_ID || ');' KILL会话
     FROM V$LOCK T1
LEFT JOIN SYSOBJECTS T2
       ON T1.TABLE_ID = T2.ID
LEFT JOIN V$SESSIONS T3
       ON T1.TRX_ID = T3.TRX_ID
    WHERE T1.TRX_ID > 0
      -- 排除已提交未释放
      AND T1.IGN_FLAG != 1
      -- 排除自身会话
      AND T3.SESS_ID != SESSID()
      -- 持有锁的时间(分钟)
      AND DATEDIFF (MI, T3.LAST_RECV_TIME, SYSDATE) >= 10
 ORDER BY T1.IGN_FLAG, T1.TRX_ID, T2.NAME;

版权声明