eygle.com   eygle.com
eygle.com  
 

« 养儿方知父母忧-恩墨满月纪念 | Blog首页 | 如何加快SMON的恢复进度? »

Oracle HowTo:判断一个死事务的恢复进度

作者:eygle |【转载时请以超链接形式标明文章和作者信息及本声明
链接:
昨天碰到一个问题,在启用SMON的串行恢复后,对于一个死事务,如何观察其恢复进度。

由于死事务已经无法通过v$transaction来观察,所以必须通过内部表来进行判断。
这个内部表是x$ktuxe,该表会记录Dead事务的恢复进度:

17:30:37 SQL> select distinct KTUXECFL,count(*) from x$ktuxe group by KTUXECFL;

KTUXECFL                  COUNT(*)
------------------------ ----------
DEAD                              1
NONE                          2393
SCO|COL                          8

可以通过观察KTUXESIZ字段来评估恢复进度:
16:59:47 SQL> select ADDR,KTUXEUSN,KTUXESLT,KTUXESQN,KTUXESIZ
            2 from x$ktuxe where  KTUXEUSN=10 and KTUXESLT=39;

ADDR              KTUXEUSN  KTUXESLT  KTUXESQN  KTUXESIZ
---------------- ---------- ---------- ---------- ----------
FFFFFFFF7D07B91C        10        39    2567412    1086075
17:02:12 SQL> select ADDR,KTUXEUSN,KTUXESLT,KTUXESQN,KTUXESIZ
            2 from x$ktuxe where  KTUXEUSN=10 and KTUXESLT=39;

ADDR              KTUXEUSN  KTUXESLT  KTUXESQN  KTUXESIZ
---------------- ---------- ---------- ---------- ----------
FFFFFFFF7D07B91C        10        39    2567412    1086067

根据评估,这个事务回滚需要大约2.55天,我Ft:
17:08:28 SQL> declare
17:10:22  2  l_start number;
17:10:22  3  l_end    number;
17:10:22  4  begin
17:10:22  5    select ktuxesiz into l_start from x$ktuxe where  KTUXEUSN=10 and KTUXESLT=39;
17:10:22  6    dbms_lock.sleep(60);
17:10:22  7    select ktuxesiz into l_end from x$ktuxe where  KTUXEUSN=10 and KTUXESLT=39;
17:10:22  8    dbms_output.put_line('time est Day:'|| round(l_end/(l_start -l_end)/60/24,2));
17:10:22  9  end;
17:10:22  10  /
time est Day:2.55

这是非常有用的一个内部表,大家可以参考一下。

-The End-

By eygle on 2007-09-11 14:02 | Comments (11) | Posted to Case | HowTo | Internal | Edit |Pageviews:

相关文章 随机文章
  • 关于Oracle的Dual表
  • Oracle Database 11g回滚段命名的变化
  • RAC环境修改undo_rentention需要谨慎
  • cursor_space_for_time参数在11.1.0.7中
  • 使用Profile对用户Session会话进行资源限制
  • 《深入浅出Oracle》出版一月记
    ITPUB年会回顾-阿里巴巴的数据库管理优化体系
    2005-12-09 EMC DISK Fault
    人生若只如初见
    在Oracle10g RAC下新增ASM磁盘组
    搜索本站:

    留言 (11)

    Posted by: 黄天厚土 at September 11, 2007 2:45 PM

    很好

    Posted by: chriszhang at September 11, 2007 5:19 PM

    真的是2.55天啊?会不会这个变化不是线性的?之前试过通过v$transaction来预估事务回滚的速度,最后发现其变化不是线性的,而是越来越快。不知道死事务的恢复会怎么样,关注中~~

    Posted by: 小荷 at September 12, 2007 2:39 AM

    SELECT a.used_ublk
    FROM v$transaction a, v$session b
    WHERE a.addr = b.taddr AND b.sid = ;

    这个也行.. 状态killed的session始终 不消失 .. 就只能等了..

    Posted by: xin at September 12, 2007 8:09 AM

    where KTUXEUSN=10 and KTUXESLT=39;
    eygle能说说这个是怎么来的吗?

    Posted by: 小荷 at September 12, 2007 9:50 PM

    灌一瓢,to -> 小荷
    select KTUXEUSN,KTUXESLT,... where KTUXECFL='DEAD'就可以看到了.就在x$kutxe中的字段
    ^|^

    Posted by: Thomas Zhang at September 12, 2007 10:23 PM

    re Thomas Zhang:
    哈哈,原来是这个,我倒是忽略KTUXECFL这个字段了。
    谢谢!

    btw,SCO|COL是什么状态?and 有关于X$表的资料吗?最近打算小结一下X$表:)

    Posted by: 小荷 at September 13, 2007 8:47 AM

    好像在分布式事务pending的时候看到过……

    Posted by: 小荷 at September 13, 2007 8:53 AM

    where KTUXEUSN=10 and KTUXESLT=39;

    eygle大师,不知道这个条件是如何得来的。。可以解释一下吗

    Posted by: Hopewell_Go at October 10, 2007 4:22 PM

    x$ktuxe 在oracle9i下是什么表?

    提个建议:
    在文章中能不能注明操作系统版本环境 oracle版本 及一些必要的环境说明

    Posted by: oracle at March 14, 2008 10:07 AM

    写的好,学习是需要像这样找到方法。

    Posted by: maomao at June 2, 2009 1:50 PM

    发表留言:



    Remember Me?
    (输入验证码后方可评论,谢谢支持)



    CopyRight © 2004 eygle.com, All rights reserved.