本人小菜鸟一枚,最近在学习MySQL(边学MySQL边对比Oracle)时遇到一个问题
MySQL通过double write避免了partial page write.这个partial page write感觉就相当于Oracle的split block.那么Oracle如何保证写脏块时不会产生split block呢?
我知道rman可以避免split block是因为它以oracle block size作为最小IO单位,如果发现checksum不一致,就会重读,通过反复读避免split block. 当执行手工begin backup命令时,each time a block is changed the datbase writes the before-image of the entire block to the redo stream before modifying the block. Then, the database also records the changes to the block in the redo log,通过将oracle block的前镜像写入redo,使得在恢复是能够获取oracle block的整个before-image,以此为基础,在通过redo中的记录进行恢复.所以如果想要恢复split block,是要有该split block的整个前镜像的吧.
但是在正常的dbwr写脏块时,是不会记录befor-image到redo的吧.那么Oracle怎么解决这个问题啊