PL/SQL重新編譯包無反應


  前幾天碰到一個有趣的事情:早上同事執行一個包很久沒有反應,就中斷了執行,發郵件讓我幫忙查看具體情況,我用PL/SQL Developer登錄后,找到這個包的過程中發現這個包的圖標有紅色叉叉,也就是說這個包有地方沒有編譯通過,於是我便單擊右鍵點擊“重新編譯”,結果一直沒有響應,導致PL/SQL Developer直接卡死,剛開始沒太留意,直接殺掉PL/SQL Developer相關進程,重新打開它然后編譯這個包,結果還是這個情況,還是頭一次遇到這種情況,一頭霧水. 后來搜索了一下才知道原因:

  1:當包正在被調用執行時,編譯該包會導致無響應情況。
  2:包中的對象或依賴對象被其它session所擁有。

查看包體是否被其它用戶調用正在執行,以sys身份登錄,執行下面SQL查詢

SELECT DISTINCT '(' || s.sid || ') - ' || username AS "(session) - username"    
FROM V$SESSION s, sys.x$kglob o, sys.x$kglpn p  
WHERE upper(o.kglnaobj) LIKE upper('%不能編譯的包體%')     
     AND p.kglpnhdl = o.kglhdadr     
  AND s.SADDR = p.kglpnuse;

發現該包沒有正在running,然后查看被鎖的對象中是否有該包依賴的對象,結果發現包中某個表被某個會話給鎖住了。殺掉該進程后,重新編譯該包,問題解決了。

參考資料:
http://blog.csdn.net/robinson_0612/article/details/7616923


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM