如何檢測被鎖住的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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM