|
|
最初由 shining_forever 发布
[B]
拜读了biti的力作后,有很多疑问,有时间一并问了,现在问一个有关delay cleanout的问题,请问物理数据文件的block 中是否有commit SCN的信息,如果有不是可以从物理文件的block中读出来就可以了?[/B]
谈一下我的理解:
delay cleanout是因为一致性读才存在的;
根椐块上的ITL(多条)中的commit SCN才可知块在什么时候曾被修改过,然后根椐回滚段可以还原出块的一些近期的状态,所以在读的时候必须清楚每个ITL相关的事务发生时间点,然后比较读开始的时间点(或者读所在事务的开始时间点)才能确定应该使用块的哪个前映像或者是直接用目前的数据;
很大的事务在commit的时候,Oracle并不会去更新块上它对应的ITL的commit SCN(这时这个ITL的commit SCN为0),下次读到这个块的时候就需要更改这个commit SCN,这就是延迟块清除。
你可以用alter system dump datafile 文件号 block 块号; 语句转储出块结构看看,然后多想想就会明白的。
可以用dbms_rowid包中的函数查到指定rowid的文件号和块号。 |
|