在block head中有ITL,ITL中记录undo block address,transaction ID和SCN.
当查询开始时,记录查询开始时的SCN,用这个SCN和ITL的SCN比较,如果ITL中的SCN比较大,则说明需要一致读。这时,在buffer cache中创建一个CR block,(创建CR block,首先在buffer cache中克隆一个block,然后根据ITL中的undo entries找到相应的undo信息,然后应用这些UNDO信息,注意:CR block的block header也随之恢复)。
然后继续比较SCN号,如果ITL中的SCN号还是大的话,则继续重复以上步骤,直到找到找到需要的版本。如果需要的undo记录已经不存在,则会报告"snapshot too old".
这就是一致读的基本原理过程。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/371/viewspace-234301/ ,如需转载,请注明出处,否则将追究法律责任。