|
有导入日志吗?
是不是在倒一张很大的表的时候中断了?
1.查找使用回滚段的sid
查询v$transaction视图
检查v$transaction.used_urec 和 v$transaction.used_ublk字段
前者代表回滚段记录数量,如果该值增加代表事务在向前,如果减少代表事务在回滚,你可以根据这个估计一下事务完成需要的时间.
后者代表undo使用的block数量.
SELECT S.SID, S.SERIAL#, S.USERNAME, R.NAME "ROLLBACK"
FROM V$SESSION S, V$TRANSACTION T, V$ROLLNAME R
WHERE S.TADDR = T.ADDR AND T.XIDUSN = R.USN
AND R.name IN ( SELECT segment_name FROM dba_rollback_segs WHERE TABLESPACE_NAME ='UNDOTBS01')
2.如何估算什么时候回滚完成?
执行查询:
SELECT a.used_ublk
FROM v$transaction a, v$session b
WHERE a.addr = b.taddr AND b.sid = <SID>
/
-- 如果used_ublk12个小时前显示为29,900现在为22,900,表示需要12个小时回滚7000个entries.
-- 那么后续的回滚需要12*(22900/7000),大概36个小时. |
|