昨天碰到一个问题,在启用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
这是非常有用的一个内部表,大家可以参考一下。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12361284/viewspace-1003/,如需转载,请注明出处,否则将追究法律责任。