当存储过程正在执行时,如果试图删除、修改、编译存储过程,等待一段时间,会报上述错误。
解决方法:
等待一段时间,重新尝试删除、修改或者编译存储过程。
如果还是失败,则查看哪些会话正在执行该存储过程。
select a.sid,a.serial#,b.sql_text
from v$session a,v$sql b
where a.sql_hash_value = b.hash_value
and a.sql_address = b.address
and b.sql_text like '%proc_hbk%';
其中proc_hbk是存储过程的名字。
得到sid和serial#,删除正在执行该存储过程的会话。
SQL> alter system kill session 'sid,serial#';
其中sid,serial#为上一步查询的结果。
如果上面命令执行失败,则根据sid得到spid,杀掉父进程。
select spid from v$process p,v$session s where s.paddr = p.addr and sid= 132;
如上,为查询sid为132的父进程id号。
执行操作系统杀进程命令kill -9 pid
再次尝试删除、修改或者编译存储过程就不报错了。