如何检测被锁住的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

原文地址:https://www.cnblogs.com/softidea/p/5336734.html