关于ORACLE大型事务回滚的几个点

在大型数据库中,一个大型操作的失败代价是比较高的,严重时甚至会引起数据库挂起。尤其在KILL大型事务之前检查事务究竟有多大可能是必要的,同时我们也需要知道回滚已经进行了多少程度。
V$transaction,v$session关联得到事务大小。
Select t.used_ublk from v$transaction t
v$session s
Where t.ses_addr=s.saddr and s.sid=&sid
在事务失败或者kill session之后,持续的监控该语句结果来估计回滚进度。如果观察到used_ublk几乎不动或者回滚非常慢,可以确定以下是否由于并行恢复引起(并行恢复有时会引起数据库恢复挂起)。在并行恢复情况下,Smon将会抓住TX lock,同时应该存在某些PS lock
PX进程占用大量的CPU资源。V$fast_start_servers和v$fast_start_transaction两张视图表示是否执行了并行恢复。如果发现并行恢复很慢,可以尝试把并行恢复关掉看看是否可以加快rollback。alter system set fast_start_parallel_rollback = false
该语句关掉并行rollback
改用串行化。
同样如果是串行化ROLLBACK,同时CPU资源尚可的话,可以采用并行恢复的方式来加快回滚。如果整体系统已经基本显示挂住,可以shutdown数据库起用并行rollback。并行恢复可以在v$session_wait中看到很多PX进程等待,Smon进程作为协调进程同时在等待PX进程完成。
数据库关闭或者kill shadow process之后,在v$transaction中将不能发现事务信息。这时候在v$fast_start_transaction中有事务信息。

请使用浏览器的分享功能分享到微信等