Oracle中形成一些表被死鎖或者會話異常退出,如執行了更新記錄操做後,既沒有commit也沒有rollback,網絡就斷開了,也會造表或記錄被鎖住,待到超時後纔會被解開,那樣都會形成應用操做被阻塞。網絡
能夠以Oralce管理員權限用戶登陸Oracle數據,查詢到被鎖的對象,而後殺除指定的會話。session
用下面的語句查詢被鎖的對象,能夠帶上更多約束條件,如schemaname等更精確的匹配。spa
SELECT a.object_id, a.session_id, b.object_name, c.* 對象
FROM v$locked_object a, dba_objects b, v$session c 排序
WHERE a.object_id = b.object_id it
AND a.SESSION_ID = c.sid(+) io
殺Seesion的SQL語句語法以下:class
alter system kill session 'sid, serial#' import
如上面查出來的一條記錄的sid是53, serial#爲663,就執行如下的語句登錄
alter system kill session '53,663'
若是要一次性殺死多個會話,一個一個填寫sid和serial#十分的繁瑣,應該在查詢被鎖對象的同時拼湊出多條的殺會話語句,以分號分隔,一塊兒複製下來,而後就能夠批量的執行了。
拼湊kill語句的方式以下,下面加了一個過濾條件和一個排序,殺除真正關心的表,而且着重注意超時時間過長的會話。