在對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;