« 养儿方知父母忧-恩墨满月纪念 | Blog首页 | 如何加快SMON的恢复进度? »
Oracle HowTo:判断一个死事务的恢复进度
作者:eygle | 【转载请注出处】|【云和恩墨 领先的zData数据库一体机 | zCloud PaaS云管平台 | SQM SQL审核平台 | ZDBM 数据库备份一体机】
链接:https://www.eygle.com/archives/2007/09/smon_rollback_dead_transaction.html
昨天碰到一个问题,在启用SMON的串行恢复后,对于一个死事务,如何观察其恢复进度。链接:https://www.eygle.com/archives/2007/09/smon_rollback_dead_transaction.html
由于死事务已经无法通过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-
历史上的今天...
>> 2018-09-11文章:
>> 2009-09-11文章:
>> 2006-09-11文章:
>> 2005-09-11文章:
>> 2004-09-11文章:
By eygle on 2007-09-11 14:02 | Comments (11) | Case | HowTo | Internal | 1611 |
好
很好
真的是2.55天啊?会不会这个变化不是线性的?之前试过通过v$transaction来预估事务回滚的速度,最后发现其变化不是线性的,而是越来越快。不知道死事务的恢复会怎么样,关注中~~
SELECT a.used_ublk
FROM v$transaction a, v$session b
WHERE a.addr = b.taddr AND b.sid = ;
这个也行.. 状态killed的session始终 不消失 .. 就只能等了..
where KTUXEUSN=10 and KTUXESLT=39;
eygle能说说这个是怎么来的吗?
灌一瓢,to -> 小荷
select KTUXEUSN,KTUXESLT,... where KTUXECFL='DEAD'就可以看到了.就在x$kutxe中的字段
^|^
re Thomas Zhang:
哈哈,原来是这个,我倒是忽略KTUXECFL这个字段了。
谢谢!
btw,SCO|COL是什么状态?and 有关于X$表的资料吗?最近打算小结一下X$表:)
好像在分布式事务pending的时候看到过……
where KTUXEUSN=10 and KTUXESLT=39;
eygle大师,不知道这个条件是如何得来的。。可以解释一下吗
x$ktuxe 在oracle9i下是什么表?
提个建议:
在文章中能不能注明操作系统版本环境 oracle版本 及一些必要的环境说明
写的好,学习是需要像这样找到方法。