Oracle包編譯,調用或調試Package時卡死問題

網上百度到了出現這種現象緣由,說的好像還挺有道理的,因此就copy過來:sql

    在對Procedure、Function或Package進行Debug時,若是長時間沒有操做,公司的防火牆會殺掉會話鏈接。這個時候數據庫不會主動的釋放會話的資源,若是再次對Procedure、Function或Package進行Debug的話,就會產生等待。由於被防火牆殺掉的會話還在運行着上次的Debug,會有鎖的存在。只用等到數據庫回收上次Debug的會話資源或者DBA手動將會話KILL掉。數據庫


手動kill session的方法:
session

1.SELECT * FROM V$DB_OBJECT_CACHE WHERE NAME=upper('PROCEDURE_NAME') AND LOCKS!='0';
注意: PROCEDURE_NAME爲存儲過程的名稱。
2.SELECT SID FROM V$ACCESS WHERE OBJECT='PROCEDURE_NAME';
3.SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID='SID';
4.ALTER SYSTEM KILL SESSION 'SID,SERIAL#' IMMEDIATE;
或者
select   vs.SID,
           vs.SERIAL#,
           vs.PADDR,
           'ALTER SYSTEM KILL SESSION ''' || vs.SID || ',' || vs.SERIAL# ||
           ''' IMMEDIATE;'
  from V$ACCESS va, V$SESSION vs
 where 1 = 1
   and va.SID = vs.SID
   and va.OBJECT = upper('SZA_PA_BGT_ADJ_COMMON_PUB')
相關文章
相關標籤/搜索