1、关于checkpoint的概述
checkpoint是oracle在数据库一致性关闭、实例恢复和oracle基本操作中不可缺少的机制,包含以下相关的含义:
A、检查点的位置(checkpoint position)为一种数据结构,在redo流中记录的SCN号是在进行数据库实例恢复起始位置。
检查点的位置由在数据缓冲池中存在的最老的脏数据位置决定,检查点的位置相当于一个指向redo流的指针,并且检查点的信息存储在控制文件和数据文件的头中。
B、将数据缓冲区中修改后的脏数据写入到磁盘中。
2、checkpoint的目的
A、当实例恢复或者介质恢复时,减少恢复所需要的时间
B、确保在数据缓冲区中的脏数据已经写入到磁盘当中
C、确保在进行数据库一致性关闭的时候所有提交的数据都写入到磁盘当中
3、什么时候数据库启动checkpoint
CKPT进程负责将checkpoint的信息写入到数据文件头中和控制文件中,包括以下几种类型的检查点
A、thread checkpoint(线程检查点或者数据库检查点)
数据库将所有在数据缓冲区内由redo修改过的数据写入到磁盘中在某些动作之前,这个线程检查点在所有的实例中的集合称之为数据库检查点(database checkpoint),线程检查点发生在下列情况下:
——数据库一致性关闭的时候
——ALTER SYSTEM CHECKPOINT语句的时候
——在线日志切换的时候
——ALTER DATABASE BEGIN BACKUP语句的时候
B、tablespace and data file checkpoint(表和数据文件检查点)
数据库将所有在数据缓冲区内由redo修改过的数据写入到磁盘中在具体动作之前,表空间的检查点是数据文件检查点的集合,每个数据文件都在这个表空间之内,此种检查点发生在以下情况:
——将一个表空间设置为只读的方式
——将一个表空间设置为offline
——数据文件大小变化的时候
——执行ALTER TABLESPACE BEGIN BACKUP的时候
C、incremental checkpoint(增量检查点)
增量检查点是线程检查点的一种,是为了避免在线日志切换的时候需要写入大量的脏数据到磁盘中,DBWn每三秒检查一次看是否有数据是否要写入到磁盘当中,当DBWn进程需要将脏数据写入到磁盘中时,从而推进检查点的位置,导致CKPT进程将检查点位置信息写入到控制文件中,但是不会写入到数据头文件中。
D、其他的检查点包括实例和介质恢复检查点、检查点当schema对象被dropped和truncated的时候
4、相关进程CKPT
CKPT进程的全称为checkpoint process,负责:
A、更新控制文件和数据头文件中的检查点信息
B、通知DBWn进程将脏数据写入磁盘中
检查点信息包括:
A、检查点位置
B、SCN
C、在线日志文件中开始恢复的位置
CKPT进程不负责将脏数据写入到磁盘中,不负责将redo缓冲区的数据写入到在线日志文件中
DBWn进程负责将脏数据存盘,LGWR进程负责将redo缓冲区中的书籍存盘