当前位置: DBARoad > 故障案例, 本站推荐 > 文章正文

Dead Transaction引起的Shutdown Hang

                    作者 :OoNiceDream【转载时请务必以超链接形式标明文章原始出处和作者信息】
                    链接:http://www.dbaroad.me/archives/2009/09/dead_transaction_cause_shutdown_hang.html

在一个测试库上,同事进行了一些操作之后,UNDO表空间撑爆了,之后Shutdown immediate时HANG住了。shutdown abort,重启后做了很多操作,例如切换UNDO表空间、DROP原UNDO表空间、将UNDO表空间改为手工管理并将需要恢复的回滚段offline、drop等,这些操作不是失败就是无效,shutdown时依然Hang住。

其实按理来说,这是一个正常的现象,因为Dead Transaction需要由smon进程进行恢复,因而在恢复没有结束前,数据库也就无法shutdown下来了。有时还可以看到另一种现象,那就是在Dead Transaction恢复的过程中,smon进程占用了100%的CPU。

可以使用以下命令来查看Dead Transaction恢复的进度:

SQL> select usn,
 2         state,
 3         undoblockstotal "Total",
 4         undoblocksdone "Done",
 5         undoblockstotal - undoblocksdone "ToDo",
 6         pid
 7    from v$fast_start_transactions;
 
   USN STATE                 Total       Done       ToDo      PID 
------ ---------------- ---------- ---------- ---------- -------- 
    18 RECOVERING           323065     187999     135066       10 
 
SQL> select spid,pid,program from v$process where pid=10;
 
SPID                PID PROGRAM
------------ ---------- ---------------------------
9048                 10 oracle@crmpst01 (P000)

或者查询内部视图x$ktuxe,通过KTUXESIZ字段来判断:

SQL> select ktuxeusn, ktuxesiz, ktuxesta, 
  2         KTUXEUSN, KTUXESLT, KTUXESQN
  3    from x$ktuxe
  4   where ktuxecfl = 'DEAD'; 
 
  KTUXEUSN   KTUXESIZ KTUXESTA           KTUXEUSN   KTUXESLT   KTUXESQN
---------- ---------- ---------------- ---------- ---------- ----------
        18     133116 ACTIVE                   18          1          2

因而在shutdown时,最好是先查查数据库中有什么大事物、Dead事物需要回滚。另外,如果恢复中smon进程占用了100%的CPU,可以通过设置10513事件,来disable smon进程的恢复,待到数据库空闲时再时行恢复(该事件的使用待测试)。

— The End —

关键字:
喜欢DBARoad的文章,那就通过 RSS Feed 功能订阅阅读吧!

我要评论

*

* 绝不会泄露


  • 订阅


      抓虾
      google reader
      my yahoo
      bloglines
      鲜果
      有道

站内搜索



返回首页 | 关于我 | 联系我 | 广告合作 | 网站地图 | 友情链接 | 版权声明 |