说是DBWR会依据LRBA顺序将脏块刷新输出到磁盘
如果按如下顺序更新
RBA :692.2998.10
Update table set name=low(name) where id=2;
------块1
RBA :692.3015.10
Update table set name=low(name) where id=4;
------块2
RBA :692.3024.10
Update table set name=low(name) where id=7;
------块3
RBA :692.3033.10
Update table set name=low(name) where id=3;
------块1
RBA :692.3102.10
Update table set name=low(name) where id=10;
------块4
RBA :692.3127.10
Update table set name=low(name) where id=13;
------块5
RBA :692.3136.10
块一应该在检查点队列的最前面,它应该最先被输出到硬盘,可它的输出会连同RBA:692.3033.10(它也修改的块一)也刷新输出。
假如块一输出后,系统断电,那么在数据库恢复的时候会从RBA:692.3024.10(第二个UPDATE语句)开始恢复,可是恢复到:RBA:692.3033.10的时候,由于块一已经刷新输出了,ORACLE还会应用这条重做记录吗?
不会的其实,ORALCE每写一个脏快,会在日志里增加一跳bwr记录。代表这个块已经被写到磁盘。
而且在根据checkpoint queue写的时候,每三秒还会在控制文件里记录LRBA的信息。下次恢复的时候,这个LRBA就是恢复起点,再通过BWR的协作,就能完成实例恢复了。