## 查询被锁定的表 ``` select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id; ``` ## 查询发生锁定表的会话及序列号 ``` select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time; ``` ## 结束产生锁表的会话 ``` alter system kill session 'SID,SERIAL#'; ``` ## 结束锁表会话异常ORA-00031 ``` # 查询处于KILLED状态的进程id select b.spid,a.osuser,b.program from v$session a, v$process b where a.paddr=b.addr and a.sid=[SID]; kill -9 SPID ``` ## 查询导致锁表的sql ``` SELECT A.USERNAME, A.MACHINE, A.PROGRAM, A.SID, A.SERIAL#, A.STATUS, C.PIECE, C.SQL_TEXT FROM V$SESSION A, V$SQLTEXT C WHERE A.SID IN ( SELECT DISTINCT T2.SID FROM V$LOCKED_OBJECT T1, V$SESSION T2 WHERE T1.SESSION_ID = T2.SID ) AND A.SQL_ADDRESS = C.ADDRESS ( + ) ORDER BY C.PIECE; ``` ## 查询导致锁表的sql语句 ``` select l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, s.user#, l.os_user_name, s.machine, s.terminal, a.sql_text, a.action from v$sqlarea a, v$session s, v$locked_object l where l.session_id = s.sid and s.prev_sql_addr = a.address order by sid, s.serial#; ```