天天看點

如何檢測被鎖住的Oracle存儲過程及處理辦法彙總(轉)

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