暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

原创 eygle 2007-09-11
706
昨天碰到一个问题,在启用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-

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论