程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle數據庫編譯存儲過程掛死問題的解決方案

Oracle數據庫編譯存儲過程掛死問題的解決方案

編輯:Oracle數據庫基礎

Oracle數據庫編譯存儲過程掛死問題的解決是本文我們主要要介紹的內容,我們知道,在Oracle數據庫中重新修改編譯了某個存儲過程A調用的另一個過程B後,需要手動將A重新編譯,一定不要在重新編譯A前去調用A,否則會造成A編譯掛死的情況。特別是在訪問量大的情況下。

這種情況下如果強行終止存儲過程編譯,再次Recompile存儲過程會發現還是掛死的,這個主要是由於強行終止後會話為INACTIVE狀態,但是該會話卻沒有被真正的釋放。使用如下語句查詢出掛起的會話:

  1. SELECT V.OSUSER, V.PROCESS, V.PROGRAM, v.MacHINE, V.TERMINAL, V.MODULE, V.USERNAME, V.STATUS, V.SID, V.SERIAL#, 'alter system kill session '''||V.sid||','|| V.SERIAL#||''';' as KILL_SESSION, V.PADDR  
  2.  
  3. FROM V$SESSION V  
  4.  
  5. WHERE V.USERNAME LIKE '%USERNAME%'  
  6.  
  7. AND V.PROGRAM like 'PlSqlDev%'  
  8.  
  9. AND V.OSUSER LIKE '%%'  
  10.  
  11. AND V.STATUS='INACTIVE'

將結果中KILL_SESSION一列復制,在sqlplus下執行,殺掉這些未釋放的會話,再重新登錄到plsql下recompile剛才的存儲過程A就能將問題解決了。

以上就是一個Oracle數據庫中編譯存儲過程掛死問題以及它的解決方案,本文就介紹到這裡了,希望本次的介紹能夠對您有所收獲!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved