異常程序導致特定 Session 佔用大量 CPU/記憶體,標準 ALTER SYSTEM KILL SESSION 'sid,serial#' 釋放資源極慢(參考「Oracle中Kill session的研究」)。
SELECT 'kill -9 ' || spid FROM v$process WHERE addr = (SELECT paddr FROM v$session WHERE sid = :sid);kill -9 <PID>ALTER SYSTEM KILL SESSION 'sid,serial#';SQL> SELECT sid,username,status FROM v$session;
...
154 SCOTT KILLED -- 長時間處于 KILLED 狀態
SQL> SELECT 'kill -9 '||spid FROM v$process WHERE addr=(SELECT paddr FROM v$session WHERE sid=154);
'KILL-9'||SPID
--------------------
kill -9 22702
[oracle@danaly ~]$ kill -9 22702
[oracle@danaly ~]$ ps -ef | grep 22702 -- 進程消失
[oracle@danaly ~]$ exit
OS 層殺掉後,資源即時釋放,DB 層標記為 KILLED 的 Session 將徹底消失。
-- 獲取 OS PID
SELECT s.sid, s.serial#, p.spid, s.username, s.status
FROM v$session s JOIN v$process p ON s.paddr = p.addr
WHERE s.sid = :target_sid;
kill -9 為強制終止,可能導致該 Session 的未提交交易回滾延遲,但能立即釋放鎖與記憶體