关于增量检查点

增量检查点是3秒一次,也就是是说,如果系统做实例恢复的话,最多不超过3秒。
这句话就不对,因为检查点增加和写不写数据文件是没有关系的。
FAST_START_MTTR_TARGET:这个参数如果设置的很小的话,oracle会频繁的触发DBWn来写数据文件(限制DB_BUFFER中的dirty block的数量等等),这样可以减少恢复的时间,但其实在9i之前,这个参数是两个参数,到9i以后合并成1个参数了。
此参数只是用来限制instance recovery恢复的时间,最大的值为3600
 
 
增量checkpoint是写最旧的dirty buffer block到数据文件,RBA记录于controlfile中,但是RBA不更新数据文件头,checkpoint 会更新RBA 到数据文件头和控制文件
 
检查点位置是是个rba,他指向着重做日志文件中的某个重做记录.在此位置前的重做记录,其对应的信息已经被写进了数据文件,在此位置后的重做记录,所对应的是数据块,有可能还在内存中.如果发生了实例崩溃,只需要在日志文件中找到检查点位置,从此处开始应用所有的重做日志文件,就完成了前滚操作.实例崩溃后,再次启动数据库,oracle会到控制文件中读取low cache rba,这就是检查点位置.从此处开始应用重做
信息,应用到on disk rba处.on disk rba是磁盘中重做日志文件的最后一条重做记录的rba.  如果某条命令的重做记录的rba高于on disk rba,那说明此重做记录还没有被写进日志文件中,崩溃发生时,他是不可能被恢复的.on disk rba是oracle前滚操作的终点.on disk 顾名思义 就是'在磁盘上'的意思.比这个更高的rba,都在log buffer中,还没有来的急被写进磁盘中的日志文件.所以是不能被用于恢复的.
 
 
下面说说DBWR写脏块的方式,有了检查点队列之后,脏块按照首次变脏的时间顺序排列,DBWR每到一定的时机,就会被触发,沿着检查点队列的顺序刷新脏块,具体在oracle中有几个参数用来确定检查点队列的长度.另有一个CKPT进程,会监控着检查点队列的长度,当检查点队列的长度达到一定限制时,CKPT会通知DBWR写脏块.CKPT会根据参数的设置和I/O的速度以及繁忙程度,计算出来一个Target rba(目rba),DBWR会沿着检查点队列,将所有Target rba之前的脏块刷新到磁盘.当CKPT通知完DBWR Target rba后,CKPT的任务就结束了.他并不会等待DBWR写完所有的Target rba之前的脏块.通知DBWR写脏块,这是CKPT的任务之一,CKPT另有一个任务,就是每3秒,检测一次DBWR的写进度.检查点队列最前面的块被称为检查点位置.DBWR是沿着检查点队列写脏块的,CKPT每3秒钟查看一下DBWR沿检查点队列写到了哪里,并且将这个位置设置为检查点位置.也就是说检查点位置之前的块,都是已被DBWR刷新到磁盘上的块.这个3秒一次检查DBWR进度的工作,也是CKPT的一个重要的任务.CKPT每3秒一次将检查点位置记录进控制文件,当然同时被记录进控制文件的还有'心跳'等其他信息.CKPT每3秒一次的工作和CKPT定期触发DBWR,这两项操作合一起被称为--增量检查点.
 
 
active是logfile不一定没有归档,只是其中对应的block还没有写入数据文件,即checkpoint还没有完成。因此,此时db崩溃后,实例恢复时需要其中的redo和undo信息。


 
 
 
 

 

你可能感兴趣的:(oracle,职场,休闲)