ITPub博客

首页 > 数据库 > Oracle > smon进程互为死锁案例--oracle一个bug处理

smon进程互为死锁案例--oracle一个bug处理

原创 Oracle 作者:post0 时间:2007-02-10 19:07:22 0 删除 编辑
smon进程互为死锁案例--oracle一个bug处理[@more@]以下这篇文章发表在我的blog上。
贴到这里与大家共享。

=====================
环境:

OS: AIX 5.2

DB: oracle9206 RAC

两个实例上面smon进程都在等待enqueue事件。从而导致部分用户无法登陆,排序请求临时表空间也不行。。。



接到客户电话,说有些用户无法登陆,挂在那里,修改它的密码也是挂在那里。并且好多查询结果都出不来。。

登上去检查,发现smon进程在等待enqueue事件。所以引起了上面的现象。检查v$lock

A节点:

12 TX 2752512 475202 6 0
12 TM 22 0 3 0
12 TM 18 0 3 0
12 TX 1441873 792576 0 6

B节点:

12 TX 1441873 792576 6 0
12 TM 22 0 3 0
12 TM 18 0 3 0
12 TX 2752512 475202 0 6

从这里也可以发现,两个实例之间发生死锁了。

客户说他前一天晚上重起过数据库,重启后也是一样的。

检查smon进程的sql语句:

select o.owner#,o.obj#,decode(o.linkname,null, decode(u.name,null,'SYS',u.name),o.remoteowner),
o.name,o.linkname,o.namespace,o.subname
from user$ u, obj$ o where u.user#(+)=o.owner# and o.type#=1
and not exists (select p_obj# from dependency$ where p_obj# = o.obj#)
order by o.obj# for update;

从SQL语句上看,应该是smon进程在清理obj$对象。

在metalink搜索,发现oracle有个这样的bug,导致互为死锁。oracle提供了相应的补丁,但是没有aix上面的版本。

现在由于两个实例的smon进程都在清理obj$表格,从而导致了死锁,如果禁止掉一个smon进程清理obj$表格,这个bug不就可以避免了吗?

于是想起10052事件,其功能禁止smon进程清理obj$表。
event="10052 trace name context forever"

在其中一个实例上填加10052事件后,重启这个实例后,一切正常。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8225414/viewspace-899037/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    2018
  • 访问量
    8224836