CKPT(check point)进程:
即检查点进程,可分为两类:
完全检查点和增量检查点
1.完全检查点
(1)触发时间:
数据库正常关闭后(shutdown immediate,shutdown)
手动切换在线日志(alter system switch logfile;)
执行检查点(alter system checkpoint;)
(2)动作:
更新scn号(system change number)到数据文件和控制文件头部;
通知dbwn写进程将脏链写入数据文件,即写入磁盘,永久保存,维持数据的一致性
2.增量检查点
(1)触发时间:
每三秒触发一次
(2)动作:
当增量检查点发生的时候CKPT将检查点队列的第一个脏块所对应的LRBA地址记录到控制文件上;不更新数据文件
如果检查点队列太长了,CKPT会通知DBWR把一部分检查点队列上的脏块写回磁盘,缩短了检查点队列
buffer cache 中的几个概念:
LRU:空闲或者干净的链,可以从这里找到未修改的数据
LRUW:脏链,一个脏块同时挂到了lruw和检查点队列,LRUW分冷端和热端,冷端即为更新频率较低的一端,热端为更新频率较高的一端,dbwn写入数据文件时从冷端开始写入。
检查点队列:同脏链一样,把脏块穿起来,同时也记录了脏块第一次被脏的地址 即LRBA. 检查点队列里面的数据块是按照数据块的LRBA地址链接的
LRBA:第一次被脏的redo block 地址,记录在控制文件
HRBA: 最后一次被脏的redo block地址
如果发生了实例崩溃,只需要在控制文件中找到第一个脏块的redo block地址,然后应用重做日志到最后一个脏块的redo block地址,就可以恢复到实例崩溃之前的状态。