一、理解几个概念:
检查点队列是什么:
数据缓冲池中脏块队列
队列的脏块队尾的增长由服务器进程来维护
队列的使用者为DBWn,即DBWn不断的去读取检查点队列,并将脏块写入数据文件中
队列里有个比较重要的概念:检查点位置,由CKPT来维护
checkpoint position是什么:
检查点位置( checkpoint position),由CKPT来维护,CKPT不断的去查看DBWn的写入进度,如果此次看到的DBWn写入的最后一块已经写入数据文件的数据块和上次看到的不一致,说明CKPT从上次检查到这次检查期间,DBWn又写了一些脏块到数据文件中,这时候要维护checkpoint position,更新为指向DBWn最后一次写入数据文件的数据块。
综上:检查点位置可以保证的是:检查点位置之前的脏块都已经写入数据文件,之后的脏块都还没有写入数据文件。
DBWR的工作内容:
不断的将检查点队列里的脏块按照顺序写入数据文件中,写入之前需要去看自己的RBA指向的redo log是否写入online redo log中,只有RBA指向的redo log块已经成功写入online redo log,才能继续完成数据块的写入。
LGWR的工作内容:
不断的将redo log buffer里的数据写入online redo log中。
CKPT的工作内容:
官方文档介绍:
1.The checkpoint process (CKPT) updates the control file and data file headers with checkpoint information and signals DBWn to write blocks to disk.
2.Checkpoint information includes the checkpoint position, SCN, location in online redo log to begin recovery, and so on.
3.CKPT does not write data blocks to data files or redo blocks to online redo log files.
即:
1.检查点进程更新控制文件和数据文件头部的检查点信息,并且通知DBWn将数据块写入磁盘中。
2.检查点信息包括检查点位置,SCN,online redo log里开始实例恢复的地方,等等。
3.检查点进程是不会直接写数据文件或者在线重做日志文件的。
个人理解:
定期去查看DBWR的写入进度,即看DBWR已经完成了哪些脏块的写入,并维护checkpoint position。
理解重点:DBWR在写入脏块前,会去触发LGWR对该块的日志的写入,确保该脏块相关联的redo log一定已经写入redo日志。
二、若数据库实例崩溃,实例恢复期间所做的内容:
恢复的起点:控制文件中记录的最新的RBA指向的online redo log记录。
恢复的终点:online redo log文件最后写入的redo log块的最后一条记录。
恢复的过程:将恢复起点到终点之间的redo记录重新执行一遍。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30167136/viewspace-1483355/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30167136/viewspace-1483355/