Oracle 编译、调用或调试Procedure、Function或Package时卡死问题


在对Procedure、Function或Package进行Debug时,如果长时间没有操作,公司的防火墙会杀掉会话连接。这个时候数据库不会主动的释放会话的资源,如果再次对Procedure、Function或Package进行Debug的话,就会产生等待。因为被防火墙杀掉的会话还在运行着上次的Debug,会有锁的存在。只用等到数据库回收上次Debug的会话资源或者DBA手动将会话KILL掉。以下是手动KILL会话的方法:

1: 查询V$DB_OBJECT_CACHE

SELECT * FROM V$DB_OBJECT_CACHE WHERE NAME='PROCEDURE_NAME' AND LOCKS!='0';

注意: PROCEDURE_NAME为存储过程的名称。

2: 通过对象查询SID

SELECT SID FROM V$ACCESS WHERE OBJECT='PROCEDURE_NAME';

注意: PROCEDURE_NAME为存储过程的名称。

3: 查询SID,SERIAL#

SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID='SID';

注意: SID为第二步查询出的SID。

4: KILL死锁的会话

ALTER SYSTEM KILL SESSION 'SID,SERIAL#' IMMEDIATE;


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM