Oracle中的Session kill不釋放問題
今天在做統計資料,整了一個特複雜的SQL,透過PL/SQL來執行,狀態列下顯示執行完成,以及執行時間,可是彈出一個錯誤提示框,說執行錯誤,視窗上的“執行”按鈕不可用,點“中斷”也不起作用。
把該SQL複製到一新的視窗再次執行,依然提示成功的提示成功,報錯的視窗照樣彈出,提示錯誤,暈死。
這時,我得確定,這兩次SQL,是不是還在資料庫裡面執行。
select * from v$session se, v$sqlarea sq
where suser = 'test'
and se.sql_id = sq.sql_id
where suser = 'test'
and se.sql_id = sq.sql_id
發現那兩條SQL確實還在執行,採用 kill session 來終止SQL的執行。
SQL> alter system kill session '3961,26056';
System altered
SQL> alter system kill session '4923,8094';
System altered
SQL>
再次執行以上語句檢視session,發現session的status居然是killed,session還存在。原來 kill session 並沒有真正釋放資源,還需要在OS裡kill程式來達到資源的真正釋放。
kill session 雖然沒釋放資源,但還是把v$session裡面的PADDR這個欄位變成一樣的了。由於PADDR欄位已經改變,我們無法透過v$session和v$process關聯來獲得spid(v$session的paddr和v$process的addr欄位進行關聯)。
只能採用以下方式:
select addr, pid, spid
FROM v$process p
where addr in (select p.addr
from v$process p
where pid <> 1
minus
select s.paddr from v$session s)
FROM v$process p
where addr in (select p.addr
from v$process p
where pid <> 1
minus
select s.paddr from v$session s)
最後在unix環境用kill -9 spid殺掉程式,在windows環境用orakill sid spid殺掉程式。
這是再執行如下語句:
select *
from v$session se, v$sqlarea sq
where suser = 'test'
and se.sql_id = sq.sql_id
from v$session se, v$sqlarea sq
where suser = 'test'
and se.sql_id = sq.sql_id
發現 killed 的記錄已經沒有了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9399028/viewspace-702774/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle kill session相關問題(上)OracleSession
- Oracle kill session相關問題(下)OracleSession
- Oracle中Kill sessionOracleSession
- Oracle中Kill session的研究OracleSession
- Oracle中Kill session [轉]OracleSession
- windows下處理kill session不被釋放的鎖WindowsSession
- Oracle中Kill session的研究 for oracle -- 轉OracleSession
- 大話Oracle中的kill sessionOracleSession
- Oracle kill sessionOracleSession
- 【kill session】Oracle 徹底 kill session(轉載)SessionOracle
- kill session的學問Session
- Oracle kill session scriptOracleSession
- oracle_kill_sessionOracleSession
- Oracle批量kill sessionOracleSession
- Oracle 徹底 kill sessionOracleSession
- 【會話】Oracle kill session系列會話OracleSession
- GOLANG中time.After釋放的問題Golang
- 輕鬆接觸Oracle資料庫中的Kill sessionOracle資料庫Session
- Kill執行中的JOB的問題
- kill sessionSession
- 刪除正在使用的檔案,空間不釋放的問題
- kill session之後,會話一直無法釋放的巧妙解決辦法(lsof)Session會話
- awk -- kill sessionSession
- kill session的測試Session
- hibernate中的no session問題Session
- (轉載)刪除檔案後硬碟空間不釋放的問題硬碟
- Alter system kill session and ORA-00031: session marked for killSession
- ora-00031:session marked for kill處理oracle中殺不掉的鎖SessionOracle
- disconnect session和kill session的區別Session
- mysql批次kill sessionMySqlSession
- alter system kill sessionSession
- KILL SESSION 相關Session
- OB運維 | 連線 kill 中的 session_id運維Session
- Linux檔案刪除但空間不釋放問題篇Linux
- 解決linux下刪除檔案或oracle表空間後空間不釋放的問題LinuxOracle
- ORA-00031:session marked for kill處理oracle中殺不掉鎖的程式SessionOracle
- disconnect session和kill session的區別 轉Session
- 淺談C#託管程式中的資源釋放問題C#