Oracle存储过程编译卡死的解决方法

有时候多次test存储过程,plsql卡住不动(未响应),进入假死状态(如下图)。 有时候一个存储过程编译到一半,突然停掉,再编译发现也是卡卡住不动了。

于是,打开任务管理器杀死进程,重新登录,但是依然没有解决问题。 后查资料,发现是session被锁的原因,那么重启数据库问题就解决了。可是反复重启耗时费力,如何不重启数据库就解决呢? 下面给出两种方案:

1、方法一:PLSQL解决

Tool(工具)—session(会话) 可以筛选“My sessions ”,然后看到“Action”一栏目,找到运行的窗口,然后选中,右键弹出选中“关闭”命令,然后选中“是”清除这条调试存储过程的会话即可,如下图所示:

2、方法二:SQL命令

1、查找当前存储过程的sid,serial#:

select * from v$session t where t.ACTION like%xxx%;
或
先找到sid:
  select va.sid,va.OBJECT from v$access va where object like %CREAT_%     
再根据sid找serial#
	SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID= 1722

2、执行kill命令杀死session:

alter system kill session1722,37;

现在就大功告成了,不用反复重启数据库了。

经验分享 程序员 微信小程序 职场和发展