輕鬆接觸Oracle資料庫中的Kill session

ljm0211發表於2012-06-20
  問:當一個sessionkill掉以 後,該session的 paddr被修改,如果有多個sessionkill,那麼多個session的paddr都會被更改為相同的程式地址,在這種情況下,資源是無法釋放的,我選擇了 查詢spid,在作業系統級來kill這些程式。但是由於此時v$session.paddr已經改變,我已經無法透過v$session和v$process關聯來獲得 spid,那還可以怎麼辦呢?

答:具體示例如下:



現在我們獲得了程式地址,就可以在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

ps:
select * from v$process where addr in (
Select p.addr From v$process p Where pid <> 1
minus
select s.paddr from v$session s
)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11411056/viewspace-733434/,如需轉載,請註明出處,否則將追究法律責任。

相關文章