儲存過程編譯時卡死

studywell發表於2015-10-28

儲存過程編譯時卡死
參考:http://blog.itpub.net/26015009/viewspace-773435/

儲存過程編譯沒完成,或者編譯失敗時,oracle 資料庫會自動把相應的儲存過程鎖起來,最無賴的做法是重啟資料庫,或找到相關會話,殺掉;

一 , 找到之前除錯的儲存過程 名稱,使用一下語句找到 sid

select a.sid,a.OBJECT from v$access a where object like '%儲存過程名%'      

可輔助查V$DB_OBJECT_CACHE確認
SELECT * FROM V$DB_OBJECT_CACHE WHERE name='儲存過程名';
v$access顯示目前庫快取物件被鎖定的資訊,這個被強加的鎖用來確保庫快取物件在sql執行請求它時不會被老化

二 、拿到sid之後,去 v$session檢視 去查詢 sid,serial#
   SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID= 140

三、拿到 sid,serial# 之後就簡單了,直接殺死 session,儲存過程就可以重新編譯了
   alter system kill session '140,10555' immediate;
   
如資料庫中殺了沒反應,需要在作業系統上殺該會話;   
select a.SID,a.SERIAL#,b.SPID,a.STATUS from v$session a,v$process b where a.SID=6566 and a.PADDR=b.ADDR;    
SID    SERIAL#    SPID                     STATUS
---------- ---------- ------------------------ --------      
6566         27 23462626                 KILLED
就要在作業系統層來kill
#kill -9 23462626
  

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

相關文章