Checkpoint在一致性数据库关闭、实例恢复和数据库操作方面提供一种关键机制。有下面相关的含义:
- 显示检查点位置的数据结构,是重做流中的SCN,用来实例恢复必须开始的地方;检查点的位置有数据库缓冲区中最老的脏缓冲区决定,检查点位置作为一个指针指向重做流,存储在控制文件和每个数据文件头部;
- 在数据库缓冲区缓存将修改的数据库缓冲区写入磁盘;
检查点的目的
Oracle使用检查点完成下面目标:
- 减少实例或介质故障恢复所需的时间;
- 确保缓冲区缓存的脏缓冲区定时写到磁盘;
- 确保所有已提交的数据在一致性关闭时写到磁盘;
Oracle数据库何时初始化检查点
检查点进程(CKPT)负责将检查点写到数据文件头部和控制文件中,检查点在各种条件下都会发生,比如,Oracle数据库使用下面的检查点类型:
- 线程检查点(Thread checkpoints):在某个目标之前,数据库将在某个线程通过redo修改的所有缓冲区写到磁盘,数据库中所有线程检查点集是一个数据库检查点,线程检查点在以下情况下发生:一致的数据库关闭、ALTER system Checkpoint语句、在线日志切换和ALTER Database begin BACKUP语句;
- 表空间和数据文件检查点(Tablespace and data file checkpoints):表空间检查点是数据文件检查点的集合,表空间中每个数据文件一个检查点。这些检查点发生在将表空间置为read-only状态或将其正常离线,收缩数据文件或执行ALTER tablespace begin BACKUP语句;
- 增量检查点(Incremental checkpoint):增量检查点是一种线程检查点,部分目的是避免在联机重做日志切换时写入大量的数据块。DBWn至少每三秒检查一次以决定是否有工作要做。当DBWn写脏缓冲区时,它推进检查点的位置,引起CKPT将检查点位置写入到控制文件,但不写入数据文件头部。
其他类型的检查点包括实例和介质恢复检查点,还有schema对象drop或truncate时的检查点。
检查点进程
检查点进程(CKPT)使用检查点信息来更新控制文件和数据文件头部,并给DBWn发信号将块写入磁盘。检查点信息包括检查点位置、SCN,开始恢复的在线重做日志的位置等。
SCN
System Change Number,SCN的值是对数据库所做更改的逻辑时间点(point in time)。Oracle 为每个已提交的事务分配一个唯一的SCN。
参考:官方文档