1.檢視是哪一個存儲過程被鎖住
查V$DB_OBJECT_CACHE視圖
select * from V$DB_OBJECT_CACHE where owner='過程的所屬使用者' AND LOCKS!='0'
2.檢視是哪一個sid,通過sid可以知道是哪一個session
查v$access視圖
select * from v$access where owner='過程的所屬使用者' and name='剛才查到的過程名'
3.查出sid和serial#
查v$session視圖
select sid,serial#,paddr from v$session where sid='剛才查到的sid';
查v$process視圖
select spid from v$process where addr='剛才查到的paddr';
4.殺程序
4.1先殺oracle程序
alter system kill session '查出的sid,查出的serial#';
4.2再殺作業系統程序
如果是unix
kill -9 剛查出的spid
如果是windows
orakill 剛查出的sid 剛查出的spid
http://www.cnblogs.com/zwl715/p/3699124.html
原因: 存儲過程執行過程中,關閉或者中斷存儲過程,重新編譯是等待時間很長,無法删除
解決:
先查出被鎖定存儲過程的spid
SELECT spid
FROM V$DB_OBJECT_CACHE OC,
V$OBJECT_DEPENDENCY OD,
DBA_KGLLOCK W,
V$SESSION S,
V$PROCESS P
WHERE OD.TO_OWNER = OC.OWNER
AND OD.TO_NAME = OC.NAME
AND OD.TO_ADDRESS = W.KGLLKHDL
AND W.KGLLKUSE = S.SADDR
AND P.ADDR = S.PADDR
AND OC.NAME = 'SP_PS_DATAWWTPFLOWSUM_U'//存儲過程名稱
登陸被鎖定存儲過程所屬Oracle的安裝伺服器, 開始->運作->CMD ,輸入格式 orakill SID執行個體 SPID如:C:\>orakill orcl 540
http://www.cnblogs.com/zwl715/p/3699120.html