ALTER SYSTEM KILL SESSION 僅標記 Session 為 KILLED,實際資源釋放需等待 Session 自行清理。若進程卡住(如等待 I/O、無限迴圈),鎖不釋放,業務阻塞。
COL object_name FOR A30
COL machine FOR A20
SELECT o.object_name, s.machine, s.sid, s.serial#
FROM v$locked_object l, dba_objects o, v$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid;
ALTER SYSTEM KILL SESSION 'sid,serial#'; -- 例:'42,21993'
-- 批量生成殺 Session 語句
SELECT 'ALTER SYSTEM KILL SESSION ''' || s.sid || ',' || s.serial# || ''';'
FROM v$locked_object l, dba_objects o, v$session s
WHERE l.object_id = o.object_id AND l.session_id = s.sid;
先查詢對應 OS Process/Thread ID:
SELECT p.spid, s.osuser, s.program
FROM v$session s, v$process p
WHERE s.paddr = p.addr AND s.sid = :target_sid;
kill -9
orakill
-- 例:orakill ORCL 12345
orakill.exe 位於 $ORACLE_HOME/bin,專門終結 Oracle 執行緒,比 Task Manager 安全。
可編寫 PL/SQL 包裹上述四步自動執行,但生產環境強烈不建議常態化:
V$SESSION_WAIT + V$LOCK 即時發現阻塞鏈。SQLNET.EXPIRE_TIME 清理斷連 Session。