CKPT进程工作示意图
2.CKPT进程工作机制
检查点进程被触发的条件为:
a> 当发生日志组切换时;
b> 用户提交了事务时(commit);
c> Redo log buffer容量达到总容量的1/3或1M时。
d> 手动alter system checkpoint 的时候。
e> 系统正常关闭时。
f> 其他(如alter tablespace .. begin backup/end backup)
当一个检查点进程发生时(图中的2),首先系统会记录检查点对应的checkpoint SCN,并记录下该时刻修改的DB BUFFER对应的日志文件的最新的重做字节地址(Redo Byte Address :RBA),然后唤醒DBWn进程,DBWn进程被唤醒后将会检查检查点队列(其实就是在data buffer cache缓冲区中的脏数据列表),把重做字节地址(RBA)之前的脏数据写入磁盘文件(图中4),在写入之前,会检查RBA之前的redo信息是否已经写入联机日志文件里,如果没有则DBWn进程又会唤醒LGWR进程把RBA之前的redo信息写入联机日志文件中(图中的5),然后DWBn再开始写入磁盘文件并更新数据块SCN,也是说DBWn进程把脏数据写入磁盘之前,必须保证这些脏数据对应的日志信息已经被写入磁盘,如果发现脏数据的日志信息没有写入磁盘,DBWn进程则唤醒LGWR进程写日志信息,完成后继续将脏数据写入磁盘。当DBWn进程把RBA之前的脏数据全部写入磁盘文件中,检查点进程将会更新数据文件头的SCN(图中3),并更新控制文件中的SCN和RBA信息(图中的1)。