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;