Oracle8i中回滚段使用有什么规则呢?
在回滚段使用上的一些规则 1。一个事务只能使用一个回滚段。 2。 多个事务可以共用一个区间。但Active的事务不能共用一个block。 3。 回滚段的current extent写满的时候,回滚段的Head不能够移动到回滚段tail所在的区间。 4。 区间总是被有顺序的循环的时候;当head移动的时候,不会跳跃区间;只能移动到下一个区间。 5。 如果head不能够使用下一个区间(如tail在下一个区间),将会分配一个新的区间extent,并将新区间extent插入到这个循环使用的extent圈中。 这叫做回滚段的扩展。 ORA-1555 snapshot too old主要是在一致...全部
在回滚段使用上的一些规则 1。一个事务只能使用一个回滚段。 2。 多个事务可以共用一个区间。但Active的事务不能共用一个block。 3。 回滚段的current extent写满的时候,回滚段的Head不能够移动到回滚段tail所在的区间。
4。 区间总是被有顺序的循环的时候;当head移动的时候,不会跳跃区间;只能移动到下一个区间。 5。 如果head不能够使用下一个区间(如tail在下一个区间),将会分配一个新的区间extent,并将新区间extent插入到这个循环使用的extent圈中。
这叫做回滚段的扩展。 ORA-1555 snapshot too old主要是在一致读和延迟块清除delay block cleanout的时候产生; [参考]一致读的步骤 1。 Read the Data Block。
2。 Read the Row Header。 3。 Check the Lock Byte to determine whether theres an ITL entry。 4。 Read the ITL entry to determine the Transaction ID (Xid)。
5。 Read the Transaction Table using the Transaction ID。 If the transaction has been committed and has a System Commit Number less than the querys System Change Number, update the status of the block (block cleanout) and start over at step 1。
第5步细分 ---IF 在Transaction Table 中根据Transaction ID 找到transaction -----------IF transaction 已经commit ----------------------IF query scn>commit scn ------------------------------------则接受该块,进行clean out,返回1 ------------------------ELSEIF query scn -------------------------------------则进行一致性读,从第6步向后执行。
收起