遇到 ALTER SYSTEM KILL SESSION 後狀態顯示 KILLED 但鎖長時間不釋放,比重啟資料庫更優雅的做法是在作業系統層級強制終結對應的 Server Process (Linux) 或 Thread (Windows)。
COL object_name FOR A30
COL machine FOR A20
SELECT object_name, 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#';
-- 批量產生指令:
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;
SELECT spid, osuser, s.program
FROM v$session s, v$process p
WHERE s.paddr = p.addr AND s.sid = :target_sid;
kill -9 orakill:orakill (thread_id 即 spid)c:\> orakill orcl 12345可寫存儲過程自動化上述四步,但不建議常態化使用。Root 強殺進程本身帶風險,可能導致共享記憶體殘留、資料檔不一致。僅作為緊急手段,事後建議檢查 Alert Log 並考慮重啟實例以確保一致性。