問當一個session被kill掉以後該session的paddr被修改如果有多個session被kill那麼多個session的paddr都會被更改為相同的進程地址在這種情況下資源是無法釋放的我選擇了查詢spid在操作系統級來kill這些進程但是由於此時v$sessionpaddr已經改變我已經無法通過v$session和v$process關聯來獲得spid那還可以怎麼辦呢?
答具體示例如下
SQL> select paddr from v$process p where pid
<> minus select spaddr from v$session s;
ADDR
BE
B
現在我們獲得了進程地址就可以在v$process中找到spid然後可以使用Kill或者orakill在系統級來殺掉這些進程
當在Oracle中kill session以後 Oracle只是簡單的把相關session的paddr 指向同一個虛擬地址
此時v$process和v$session失去關聯進程就此中斷然後Oracle就等待PMON去清除這些Session所以通常等待一個被標記為Killed的Session退出需要花費很長的時間如果此時被Kill的process重新嘗試執行任務那麼馬上會收到進程中斷的提示process退出此時Oracle會立即啟動PMON 來清除該session
From:http://tw.wingwit.com/Article/program/SQL/201404/30531.html