oracle11g session,Oracle11g中Killsession心得
我們知道,在Oracle數(shù)據(jù)庫中,可以通過kill session的方式來終止一個進(jìn)程,其基本語法結(jié)構(gòu)為:
我們知道,在Oracle數(shù)據(jù)庫中,可以通過kill session的方式來終止一個進(jìn)程,其基本語法結(jié)構(gòu)為:
alter system kill session 'sid,serial#' ;
被kill掉的session,狀態(tài)會被標(biāo)記為killed,Oracle會在該用戶下一次touch時清除該進(jìn)程.
我們發(fā)現(xiàn)當(dāng)一個session被kill掉以后,該session的paddr被修改,如果有多個session被kill,那么多個session
的paddr都被更改為相同的進(jìn)程地址:
在這種情況下,很多時候,資源是無法釋放的,我們需要查詢spid,在操作系統(tǒng)級來kill這些進(jìn)程.
但是由于此時v$session.paddr已經(jīng)改變,我們無法通過v$session和v$process關(guān)聯(lián)來獲得spid
那還可以怎么辦呢?
我們來看一下下面的查詢:
我們注意,紅字標(biāo)出的部分就是被Kill掉的進(jìn)程的進(jìn)程地址.
簡化一點(diǎn),其實(shí)就是如下概念:
Ok,現(xiàn)在我們獲得了進(jìn)程地址,,就可以在v$process中找到spid,然后可以使用Kill或者orakill在系統(tǒng)級來殺掉這些進(jìn)程.
實(shí)際上,我猜測:
當(dāng)在Oracle中kill session以后, Oracle只是簡單的把相關(guān)session的paddr 指向同一個虛擬地址.
此時v$process和v$session失去關(guān)聯(lián),進(jìn)程就此中斷.
然后Oracle就等待PMON去清除這些Session.所以通常等待一個被標(biāo)記為Killed的Session退出需要花費(fèi)很長的時間.
如果此時被Kill的process,重新嘗試執(zhí)行任務(wù),那么馬上會收到進(jìn)程中斷的提示,process退出,此時Oracle會立即啟動PMON
來清除該session.這被作為一次異常中斷處理.-The End-
最后補(bǔ)充一點(diǎn),在oracle 11g r2中,這條sql:
換成這樣應(yīng)該更合適:
本條技術(shù)文章來源于互聯(lián)網(wǎng),如果無意侵犯您的權(quán)益請點(diǎn)擊此處反饋版權(quán)投訴 本文系統(tǒng)來源:php中文網(wǎng)
總結(jié)
以上是生活随笔為你收集整理的oracle11g session,Oracle11g中Killsession心得的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python indices_pytho
- 下一篇: c#调用c++的dll接口