文章詳情頁
問答方式輕松學習Oracle數據庫中的Kill session
瀏覽:90日期:2023-11-26 15:50:20
問:當一個session被kill掉以后,該session的paddr被修改,假如有多個session被kill,那么多個session的paddr都會被更改為相同的進程地址,在這種情況下,資源是無法釋放的,我選擇了查詢spid,在操作系統級來kill這些進程。但是由于此時v$session.paddr已經改變,我已經無法通過v$session和v$process關聯來獲得spid,那還可以怎么辦呢?答:具體示例如下:SQL> select p.addr from v$process p where pid <> 1; 2; minus; 3; select s.paddr from v$session s; ADDR -------- 542B70E8 542B7498現在我們獲得了進程地址,就可以在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。
排行榜