Oracle殺掉系統進程的描述
在導入附件表AFFIX的時候,數據量很小就1w多條數據,但是AFFIX中有一個blob的大字段,這就使得查詢起來很慢,因爲工作的環境網絡特別的不穩定,開始導入了大概快一半了,突然網絡斷了,當時真的很生氣,但是也沒有什麼辦法,網絡好後接着導入此時總是出現導入錯誤、甚至導入了很長時間,數據條數根本沒發生變化,就是這樣的反反覆覆,查看了一下Oracle鎖表的情況:
SELECT OBJECT_NAME, MACHINE, S.SID, S.SERIAL#
FROM V$LOCKED_OBJECT L, DBA_OBJECTS O, V$SESSION S
WHERE L.OBJECT_ID = O.OBJECT_ID
AND L.SESSION_ID = S.SID;
結果就看到如下結果:
果然有表鎖死了,心想kill掉鎖死的表很簡單,命令如下:
alter system kill session '519,10230';
執行的時間很長,後來居然出現了下圖的錯誤:
一看就是報錯了,查了一些資料是因爲oracle鎖死的表被殺死後,狀態被標識爲“killed”但是鎖定資源很長時間才能得到釋放,有的時候實在沒有別的好的辦法我們就需要重啓數據庫了,我的理解是如果等半天或者更長時間的話是可以被釋放的。於是就開始查詢資料、例子,解決辦法如下:
SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID='519' --被鎖定的SID
此時可以得到 PADDR ,在通過SQL得到:
SELECT SPID FROM V$PROCESS WHERE ADDR='695E3F2C'; --PADDR的值
這個時候就可以直接在系統中把oracle進程殺掉了,可以使用 kill -9 SPID 或者 ORAKILL SID SPID
此時整個操作完成,如果遇到此類問題不能解決大家在一起討論。