什么是增量检查点?

最近对增量检查点和全局检查点有些疑惑,查看了很多的资料感觉都写得非常复杂不容易理解。下面贴出一些自己的心得,如果有错误的地方希望得到指正。
                                    

1,什么是检查点
   检查点是数据库事件,它是指当前数据库dbwr进程将脏块从db buffer写到数据文件的进度,减少实例崩溃后,实例恢复的时间,是实例恢复的起点。
2,检查点的分类
  全局检查点:通常是dba手动生成 alter system checkpoint   或者正常关闭数据库的时候会自动产生。

  增量检查点:这个比较复杂可以从dbwr写的条件说起
dbwr写的条件
   1,检查点发生的时候
   2,脏块达到三分之一
   3,没有空闲的块
   4,timeout occurs
   5,rac ping request is made
   6,表空间的脱机,只读,热备份
   7,表的drop和truncate

一,  从上面可以看出,dbwr写的时候并不只是检查点发生的时候,也就是说即使检查点没有发生dbwr也可能在写脏块。 那么数据库如果只是记录了全局检查点,实例崩溃后,很多dbwr已经写到数据文件中的脏块也会被应用日志。增加了实例恢复的时间。                   

二,通过增量检查点 :oracle在db buffer中有个检查点队列也叫脏队列,ckpt进程会每三秒去读去dbwr写的进展,并把这个点记录到控制文件中,但是不会记录到数据文件头,也就是说它记录的是dbwr实时的写入情况。这样当实例崩溃后,需要进行实例恢复,数据库就可以从控制文件中读取这个增量检查点作为实例恢复的起点,减少实例恢复的时间。
 
两个概念 :
1,CKPT每3秒一次将检查点位置记录进控制文件,当然同时被记录进控制文件的 还有'心跳'等其他信息.CKPT每3秒一次的工作和CKPT定期触发DBWR,这两项操作合一起被称为--增量检查
2,增量检查点并不会去更新数据文件头,以及控制文件中数据库SCN以及数据文件条目的SCN信息,而只是每3秒由CKPT进程去更新控制文件中的low cache rba信息,也就是检查点的位置。


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