|
zergduan 发表于 2015-7-23 13:41 ![]()
刚才测试了一下, 改变向量中只有修改后的值,所以上面说的方法2(忽略块scn,直接应用所有redo record)中 ...
针对这个我还有点疑问。假如之前对该块上rowid为rowidxxx行的某个字段A进行了更新,然后删除了这一行,后来又插入一条数据并重用了这个rowidxxx,最后又对新插入的数据行某个字段B进行了update,接着又删除了这条记录,最后又插入一行,但是并没有重用前面删除行的rowidxxx,再后来又插入一条数据并重用了rowidxxx。假设这个过程中检查点队列一直没有没有变化,最后这个块又早于检查点队列的第一个块写到磁盘,此时实例崩溃,在启动数据库进行实例恢复的时候,简单的对这个数据块应用redo日志,能保证最后的结果跟实例崩溃时的一致么,(因为崩溃时它已经写到磁盘)也就是说能保证虽然对它应用了重做日志但是最终块上的数据却和实例恢复前磁盘上的数据一致么?
总之就是一句话,因为实例恢复要以磁盘上现有状态为起点,假设某个块在实例崩溃时已经写到磁盘,而且它的重做日志位于lrba和on disk rba之间,该块的所有数据为总称A,那么应用重做日志后,它的数据还应该为A,可以保证这样么?
表述有点儿乱,不知道版主能不能理解我要表达的意思 |
|