oracle block恢复机制的理解
之前学习oracle block recovery时,对整个过程的理解做了个简单的记录。看过的朋友请指正。
可以通过dump oracle数据块,结合dump文件分析oracle的块恢复过程。
数据块的版本(version)是该块中的SCN和SEQ number所决定的。
每个数据块头部都存储着SCN,SEQ和DBA的信息,同样在每个change vector中也存在。
block与change vector中的SCN,SEQ和DBA值相等说明,该块已经应用了redo,不需要recovery了。
在redo被应用的前后cache都要对块进行检查,以确定数据块是否存在问题。
如果块中的SCN高于change vector中的SCN,表明redo已经应用过,可以废弃了。如果redo推进了SCN,SEQ将会重置为1,否则SEQ也推进。
如果块中的SCN低于change vector中的SCN,表明数据库丢失了部分redo changes。说明数据库存在lost writes或者bug。