文章摘抄与(吕海波老师 的)-<oracle内核技术揭秘>
我们知道每一个会滚段都是循环利用的,只有事务提交或者过期了,它的前映像数据所占用的回滚块,就可以被其他事务覆盖,
凡是UNDO块被覆盖或重用是有一定规则进行限制的,这些规则可能导致某些事务占用undo块并不多,但实际上UNDO表空间已经无空间可用。
UNDO块的seq值
在每个回滚块(重用原则: 被重用块的seq值必须小于新一轮的seq值)
所以并不是已经提交超过undo_retention参数就可以被覆盖。
2 号区3号block 一直未提交。
放继续使用2号区时发现2号区3号块仍然未提交。,于是不能使用2号区的所有块,也不能跳过,oracle会进行一次膨胀。
添加一个新区到1号区之后为 新的2号区:
也就是说,只要某个区一直不被使用,该UNDO 段就不算使用了一轮,这样即使1,2号区早已提交,且超过undo_retention,他们的undo块也不会被覆盖。