检查点队列–实例崩溃恢复原理剖析
什么叫检查点队列?
检查点队列是将脏块连接起来,按照第一次脏的数据块依次往后串联起来,形成一个队列。
检查点的作用是什么?
检查点只是一个数据库事件,它存在的根本意义在于减少崩溃恢复时间,Oracle8i以前是没有检查点队列这个说法的,当数据库宕机或者异常关闭的时候(shutdown abort) 再次启动数据库会根据全部的redo log日志将已提交的数据进行恢复,消耗很长时间,检查点队列出现以后只需要找到第一个脏快所对应的redo log的地址和最后被脏的脏快对应的redo log地址进行恢复,缩短了恢复的时间。如下图:
先来认识几个名词:
RBA: redo block address日志的地址,日志块的地址。 如我们对一个数据库进行修改并且提交了将会在redo log里产生对应的日志。RBA正是记录被修改的数据块对应的日志地址。
扩展:对每个脏块来讲有LRBA和HRBA,LRBA数据块指的是最早被脏的日志地址 HRBA数据块最近被脏的日志地址也是对应当前数据块最后一次被修改的日志地址。假设最近一次是第五次被脏,它也对应着一个地址叫HRBA地址。
LRBA 记录着最早被脏的数据块地址,而日志是按照时间顺序记录着buffercache的变化历程,也就是在它后面被脏的数据库都会在它后面也就是检查点队列的后面所有的数据块,它们的脏所对应的日志,都在LRBA对应的日志地址的下面。
如图中的数据块(文件后6 Block500)被修改为B 因为他对应的时间是最早被修改的,所以它可以理解为LRBA,所以对应的redo