在对Procedure、Function或Package进行Debug时,如果长时间没有操作,这个时候数据库不会主动的释放会话的资源,如果再次对Procedure、Function或Package进行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;