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')
相关文章
相关标签/搜索