文章詳情頁
問答方式輕松學(xué)習(xí)Oracle數(shù)據(jù)庫中的Kill session
瀏覽:104日期:2023-11-26 15:50:20
問:當(dāng)一個(gè)session被kill掉以后,該session的paddr被修改,假如有多個(gè)session被kill,那么多個(gè)session的paddr都會(huì)被更改為相同的進(jìn)程地址,在這種情況下,資源是無法釋放的,我選擇了查詢spid,在操作系統(tǒng)級(jí)來kill這些進(jìn)程。但是由于此時(shí)v$session.paddr已經(jīng)改變,我已經(jīng)無法通過v$session和v$process關(guān)聯(lián)來獲得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現(xiàn)在我們獲得了進(jìn)程地址,就可以在v$process中找到spid,然后可以使用Kill或者orakill在系統(tǒng)級(jí)來殺掉這些進(jìn)程。當(dāng)在Oracle中kill session以后, Oracle只是簡(jiǎn)單的把相關(guān)session的paddr 指向同一個(gè)虛擬地址.此時(shí)v$process和v$session失去關(guān)聯(lián),進(jìn)程就此中斷,然后Oracle就等待PMON去清除這些Session.所以通常等待一個(gè)被標(biāo)記為Killed的Session退出需要花費(fèi)很長的時(shí)間,假如此時(shí)被Kill的process,重新嘗試執(zhí)行任務(wù),那么馬上會(huì)收到進(jìn)程中斷的提示,process退出,此時(shí)Oracle會(huì)立即啟動(dòng)PMON 來清除該session。
標(biāo)簽:
Oracle
數(shù)據(jù)庫
排行榜
