存储过程编译时卡死
参考:http://blog.itpub.net/26015009/viewspace-773435/
存储过程编译没完成,或者编译失败时,oracle 数据库会自动把相应的存储过程锁起来,最无赖的做法是重启数据库,或找到相关会话,杀掉;
一 , 找到之前调试的存储过程 名称,使用一下语句找到 sid
select a.sid,a.OBJECT from v$access a where object like '%存储过程名%'
可辅助查V$DB_OBJECT_CACHE确认
SELECT * FROM V$DB_OBJECT_CACHE WHERE name='存储过程名';
v$access显示目前库缓存对象被锁定的信息,这个被强加的锁用来确保库缓存对象在sql执行请求它时不会被老化
二 、拿到sid之后,去 v$session视图 去查询 sid,serial#
SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID= 140
三、拿到 sid,serial# 之后就简单了,直接杀死 session,存储过程就可以重新编译了
alter system kill session '140,10555' immediate;
如数据库中杀了没反应,需要在操作系统上杀该会话;
select a.SID,a.SERIAL#,b.SPID,a.STATUS from v$session a,v$process b where a.SID=6566 and a.PADDR=b.ADDR;
SID SERIAL# SPID STATUS
---------- ---------- ------------------------ --------
6566 27 23462626 KILLED
就要在操作系统层来kill
#kill -9 23462626
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29519108/viewspace-1817693/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29519108/viewspace-1817693/