異常 SQL 或邏輯 Bug 導致某 Session 佔用大量 CPU/內存,ALTER SYSTEM KILL SESSION 'sid,serial#' 執行後狀態變 KILLED 但進程長時間不釋放資源。
KILL SESSION 只是標記會話為「待終止」,實際清理由 PMON 進程異步執行,大事務回滾、鎖清理耗時不可控。
SELECT sid, serial#, username, status, machine, program
FROM v$session
WHERE username = 'SCOTT'; -- 或按 SQL_ID、MODULE 等過濾
SELECT 'kill -9 ' || p.spid AS kill_cmd
FROM v$process p, v$session s
WHERE p.addr = s.paddr
AND s.sid = :target_sid; -- 替換為實際 SID
輸出示例:kill -9 22702
[oracle@db ~]$ ps -ef | grep 22702
oracle 22702 1 0 Oct25 ? 00:00:02 ora_p001_danaly
[oracle@db ~]$ kill -9 22702
[oracle@db ~]$ ps -ef | grep 22702 -- 確認進程消失
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
IMMEDIATE 關鍵字(10g+)讓 PMON 立即回滾並釋放鎖,不再等待。
-- 確認 Session 消失
SELECT sid FROM v$session WHERE sid = :target_sid; -- 無記錄
-- 確認鎖釋放
SELECT * FROM v$lock WHERE sid = :target_sid; -- 無記錄
-- 觀察系統負載下降
-- top、vmstat、AWR 報告對比
DBMS_RESOURCE_MANAGER) 限制單 Session CPU/IOV$SESSION_WAIT、V$SQL_MONITOR 長時間運行 SQL 自動告警AWR/ASH 分析,優化高負載 SQLOS Kill + Session Kill IMMEDIATE 是處理失控進程的最快組合拳。平時做好資源管控與監控,才能從源頭減少此類緊急處理。