ITPub博客

首页 > 应用开发 > IT综合 > Dead Transaction引起的Shutdown Hang

Dead Transaction引起的Shutdown Hang

原创 IT综合 作者:asword 时间:2009-09-29 13:13:16 0 删除 编辑
[@more@]

在 一个测试库上,同事进行了一些操作之后,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 —

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

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

注册时间:2009-03-17

  • 博文量
    137
  • 访问量
    399355