关闭

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

标签: sqlc
995人阅读 评论(0) 收藏 举报
分类:
昨天碰到一个问题,在启用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

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3374646次
    • 积分:30328
    • 等级:
    • 排名:第166名
    • 原创:529篇
    • 转载:49篇
    • 译文:0篇
    • 评论:245条
    个人简介
    每天进步一点一点

    MySQL,Oracle,Data Architect

    email/msn:810312zxg@163.com
    QQ :106708376
    QQ群 :26770683
    weibo :weibo.com/skatexg
    最新评论