1 检查点列队与实例恢复
- 块被修改时会产生redo记录。
- 块在由不脏变脏时,会被链接到检查点列队。
- 检查点列队块的排序基本和redo记录保持一致。
- DBWR每3s检查一次检查点列队,也就是脏块数,超过一定范围,会触发写脏块。
- CKPT每3s会将检查点列队对应的LRBA记录到控制文件中。
- 如果发生数据库实例崩溃,宕机情况,恢复起点就是检查点列队对应的LRBA位置
- oracle找到此LRBA,定位到redo的某个位置,开始依次进行恢复。
- 上述过程为CRASH recover过程前滚过程,还需要借助undo进行回滚。(如果undo损坏,切换新的undo,将会产生大量的CR读取,切换完成后再进行正常重启数据库)
什么是rba ?
脏数据块 改对应的redo记录条目的位置
rba包括哪些内容?
- 条目所在redo文件的sequence号
- 条目所在日志文件的块号
- 条目距离日志文件开始位置的偏移量
rba的分类
- low rba :在buffer cache中的数据块第一次数据改变所对应的RAB。 脏数据块在检查点 队列里面按照low rba排列。
- high rba :在buffer cache中的数据块最近一次数据改变时所对应的RAB。
- checkpoint rba:在checkpint queue中(每次checkpoint queue被clean以后)第一个脏数据块第一次被修改对应的RAB,这个RBA之前的脏数据已经被全部写入磁盘。
- on-disk rba:是 lgwr 写日志文件的最末位置的地址。
数据库 实例恢复 的范围
从checkpoint RBA 到on-disk RBA 的 充作记录。8i所引入的增量检查点每隔三秒钟或发生日志切换时启动。它启动时只做一件事情:找出当前检查点队列上的第一个buffer header,并将该buffer header中所记录的LRBA(这个LRBA也就是checkpoint position了)记录到控制文件中去(checkpoint RBA )。而on-disk RBA 是 lgwr 写日志文件的最末位置的地址。
与rba相关的数据字典
X$BH 用于查看脏块的LRBA和HRBA(There is also a recovery RBA which is used to record the progress of partial block recovery by PMON.) 。 X$TARGETRBA 查看增量checkpoint RBA,target RBA和on-disk RBA。 X$KCCCP 这里面也有增量checkpoint RBA,target RBA的信息。 X$KCCRT 完全checkpoint(full thread checkpoint)RBA信息
本文深入解析Oracle数据库的实例恢复机制,重点讲解检查点列队、脏块与RBA的关系,以及如何通过RBA进行数据库恢复。文章还详细介绍了RBA的分类及其在恢复过程中的作用。
893

被折叠的 条评论
为什么被折叠?



