这个专题讲一些日常运维的异常处理

今天讲一个Package编译hang住的处理过程


1. 现象

开发人员反映编译一个package的时候hang住,无法编译成功

首先想到的是可能有该package被其他进程锁住了


2. 原因查找

2.1 查找对象访问情况

这里我们使用v$access查询当前正在被访问的对象

注意:这个语句有时查询非常缓慢,甚至无法查出

select * from v$access  where object ='HDB_JOB';

这时我们使用下面的方法

2.2 查找会话的等待事件

这里首先根据机器名或者用户名找出开发人员对应的会话

select * from v$session where   terminal='ASEN-NB862' or sid=706;

这里记住SID

接下来我们查看v$session_wait 视图中该会话对应的等待事件

select * from v$session_Wait order by event  desc 

如果为library cache pin则说明有进程在运行这个package

这时可以参考如下链接解决

http://www.zhaibibei.cn/oralce/troubleshooting/library-cache-pin/

如果不是则说明可能是个bug,需要联系oracle support 或者重启数据库试试