背景:
运行一个长事务会话SQL,取消运行或者kill会话,回滚时间较长的情况。
影响到其它业务运行,需要尽快回滚的场景。
1.可以通过kill会话对应的操作系统进程,能够使用到并行恢复,会加快回滚速度。(首选)
2.调高FAST_START_PARALLEL_ROLLBACK参数(只是增大并行恢复进程的limit值),动态生效,对于会话中使用并行的事务有作用。通常默认值low已经足够。
会话中未使用到并行的事务仍然需要先kill会话对应的操作系统进程。
alter system set fast_start_parallel_rollback=high;
3.如果有条件能够重启数据库,则修改_cleanup_rollback_entries参数到5000再重启库。
alter system set "_cleanup_rollback_entries"=5000 scope=spfile;
预估回滚需要的时间
set linesize 100
alter session set NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS';
select usn, state, undoblockstotal "Total", undoblocksdone "Done", undoblockstotal-undoblocksdone "ToDo",
decode(cputime,0,'unknown',sysdate+(((undoblockstotal-undoblocksdone) / (undoblocksdone / cputime)) / 86400)) "Estimated time to complete"
from v$fast_start_transactions;