日期:2014-05-16  浏览次数:20766 次

由一个案例引出SMON的一个功能: Recover Dead transaction


  

一.故障说明

 

前段时间一朋友遇到的案例,根据他的描述,我小整理了一下。

 

数据库环境:AIX + ORACLE 10.2.0.5, 单机。

 

朋友说一个大事务不能完成回滚操作,系统异常。 查看等待事件,如下图:

 

 

这里的row cache lock 较为严重。 row cache lock 对应的cache#=11,对应的child latch是dc_object_ids。

 

如何获取这个child latch可以参考如下blog:

latch row cache objects 等待事件及 child latch对象 说明

http://blog.csdn.net/tianlesoftware/article/details/6537227

 

Trace 文件出现大量的: waitfor stopper event to be increased。

 

 

这个wait forstopper event to be increased的等待事件是SMON进程的event,也就是说我们的SMON 进程在这个时候出现了异常。

 

    SMON 进程有一个非常重要的功能,就是Recover Dead transaction。

 

使用如下SQL 查看了一下Recover的进度:

SELECT usn,

       state,

      undoblockstotal "Total",

      undoblocksdone "Done",

      undoblockstotal -undoblocksdone "ToDo",

       DECODE(

         cputime,

          0, 'unknown',

            SYSDATE

          +(  (  (undoblockstotal-undoblocksdone)

               / (undoblocksdone/cputime))

             /86400))

          "Estimatedtime to complete"

  FROMv$fast_start_transactions;

 

返回结果如下:

 

粗略的看一下,需要5个月的时间。 开了一个国际玩笑。

 

刚拿到数据,以为是如下文档里说的现象:

Database Appearsto Hang Waits for "Wait for a undo record" and "Wait for stopperevent to be increased" Due to Parallel Transaction Recover [ID 464246.1]

 

MOS的现象有3种:

1)  Database appears to hang

2)  Undo tablespace is growing.

3)  Systemstate dump shows the