发布网友 发布时间:2022-05-01 20:53
共2个回答
懂视网 时间:2022-05-02 01:15
2:按对象查出sid的值
select /*+ rule*/ SID from V$ACCESS WHERE object=‘CUX_OE_ORDER_RPT_PKG‘;
注意:CUX_OE_ORDER_RPT_PKG 为存储过程的名称。
3:查sid,serial#
SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID=‘刚才查到的SID‘;
4、根据会话id(sid),此会话的等待事件:
[sql] view plain copyevent字段即为等待事件。查询后我们发现这个会话等待事件为SQL*Net message from dblink;在查看会话的logon_time为两天前。这个时间远超过我们估计时间。
5、根据会话id查看此会话正在执行的sql语句
[sql] view plain copy查询后发现正在执行的sql语句为通过dblink到远程数据库上A表查询数据,插入到B表。
6、连接远程数据库,查询当前被锁的对象
[sql] view plain copy查看后发现远程数据库中并没有涉及到A、B表被锁
7、查看远程数据的会话:
[sql] view plain copy使用dblink连接远程数据库,在远程数据库上的会话的program应该是是oracle.exe
查询后发现,两个远程库有时候根本没有相关会话,有时候可能有相关会话,但其等待事件是 SQL*Net message from client 远程库在等待本地Oracle给他发请求。
本地库等dblink远程库,远程库等待client消息。看来这个存储过程是不可能执行完了。
具体什么原因造成了,还不清楚。
这里给出的处理方法就是杀死会话
http://blog.csdn.net/fupei/article/details/7325190
具体步骤可参考上面的文章
查看Oracle中存储过程长时间被卡住的原因
标签:本地 ddr tail 连接 tle 步骤 sql lin term
热心网友 时间:2022-05-01 22:23
你是要找到被锁住的存储过程,还是要看存储过程是那部分执行慢,导致过程被锁住时间长。