ITPub博客

首页 > Linux操作系统 > Linux操作系统 > RAC平台无法创建任何对象解决一例

RAC平台无法创建任何对象解决一例

原创 Linux操作系统 作者:cc59 时间:2006-12-30 00:00:00 0 删除 编辑


Solaris5.9

集群件:veritas cluster server

文件系统:VXFS

oracle9207 on rac

接到电话,说在任何一个实例上无法创建任何数据库对象。之前曾经发生过此类故障,客户为重启实例后解决。结果这几天该故障重现,

查看到v$lock存在锁定情况,通过查询dba_waiters后发现sid为12的会话持有obj$表的锁。发现在v$sql中的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;

再通过与v$process关联取得spid后,发现此会话为smon进程。而该进程直接持有了obj$的锁。也就是说,两个实例SMON互锁,导致无法创建任何数据库对象。但是为什么会造成互锁呢?我们知道smon的作用是在实例启时负责进行恢复工作。此外,还负责清除系统中不再使用的临时段, 以及为数据字典管理的表空间合并相邻的可用数据扩展,而在RAC中,一个实例的 SMON 进程能够为出错的 CPU 或 实例进行实例恢复。这我们的情况中,RAC并没有出现实例crash. 当然不存在恢复。那么还有可能的情况就是清除临时段了,通过查询,我们发现运营商的DBA发生了一个严重的错误,那就是将temp表空间使用datafile来创建,而且并且是dict管理模式。这样导致了两个实例的smon相互对此临时段进行清除以及合并,从而导致了互锁,才导致后面出现的无法创建任何数据库对象。解决方法,重建temp表空间,使用tempfile,以及创建为local方式的temp tablespace.然后重启节点。另外一种方法就是使用

Event来禁止某个实例smon

Event=’ 10052 trace name context forever’;

目前我所采用的是第一种策略了.从半个月时间看来,数据库运行正常.

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

请登录后发表评论 登录
全部评论

注册时间:2007-12-21

  • 博文量
    132
  • 访问量
    308421