1 什么是检查点 checkpoint


checkpoint 是数据库的一个内部事件,检查点激活时会触发数据库写进程dbwr 将数据缓冲区里的脏块写到数据文件中,其作用有两个方面

)1 保证数据的一致性,这是指将脏数据从数据缓冲区写到硬盘上,从而保证内存和硬盘上的数据是一致的

)2 缩短实列恢复的时间,实列恢复时,要把实例异常关闭前没有写到硬盘的脏数据通过日志进行恢复。如果脏块过多,实例恢复的时间也过长,检查点的发生可以减少脏块的数量,从而减少实列恢复的时间。



检查点分类


)1完全检查点 full checkpoint

)2增量检查点 incremental checkpoint

)3 局部检查点 partial  checkpoint


完全检查点工作方式:

记下当前的SCN ,将SCN 之前所有的脏块一次性写完,再将该SCN 号同步到控制文件和数据文件头部,

触发完全检查点有四个操作,正常关闭数据库,手动检查点切换,日志切换,数据库热备模式,alter database begin backup



一个重要参数 FAST_START_MTT_TAGET 参数,它给出了你希望多长时间完成恢复实列


次参数单位为秒,缺省值是0 范围0-3600 秒,根据这个参数,oracle计算出内存中累计的脏块所需的日志恢复时间,如果日志累计到一定量,则增量检查点会触发。oracle会根据dbwn进程自身需要减少写入量,这样虽然实现了性能最大化,但实例恢复时间可能会比较长。








什么是增量检查点


)1被修改过的块,在oracle中都统称为脏块,脏块按照首次的变脏的时间顺序被一个双向链表指针串联起来,这称作检查点队列,

)2当增量检查点发生时,DBWR 将会被触发,沿着检查点对应列的顺序,将部分脏块写到磁盘上,每次刷新截止的那个块的位置就叫检查点位置。检查点位置之前的块,都是已经刷新到磁盘上的块,而检查点对应的日志地址(RBA) 又总是被记录在控制文件中。如果发生系统崩溃,这个最后的检查点位置,就是实列恢复运用的日志起点

)3 增量检查点使检查点位置前移,进而缩短实列恢复的需要的日志起点和终点之间的巨鹿,触发增量检查点越频繁,实列恢复的时间越短,但数据库性能受到频繁io影响会降低

)4 增量检查点不会同步更新数据文件和控制文件头部的scn






局部检查点


对于仅限于局部影响的操作,可以触发局部检查点


1.比如 表空间offline 数据文件,offline 删除,extent 表,truncat begine backup (将表空间置于备份模式等)