Oracle为undo的管理提供了另一个参数:undo_retention。该参数以秒为单位,表示当
事务提交或回滚以后,该事务所使用的undo块里的数据需要保留多长时间;当保留的时
间超过undo_retention所指定的时间以后,该undo块才能够被其他事务覆盖。
当我们使用AUM,并设置了undo_retention以后,undo块就存在四种状态。
a. Active:表示正在使用该undo的事务还没有提交或回滚。
b. Inactive:表示该undo上没有活动的事务,该状态的undo可以被其他事务覆盖。
c. Expired:表示该undo持续inactive的时间超过undo_retention所指定的时间。
d. Freed:表示该undo块内容是空的,从来没有被使用过。
当活动的事务使用undo segment时,在AUM下,事务可以在不同的undo segment
之间动态交换undo空间(也就是extents),当一个执行的事务需要更多的undo空间
时,首先会重用当前undo segment里的可用空间,如果不足,则按照下面步骤获
取所需要的extent :
a. 获取undo表空间中可用的,空的extents;
b. 获取其他undo segment里的expired状态的extents;
c. 如果undo数据文件启用了自动扩展,则文件自动扩展;
d. 如果undo文件都没有启用自动扩展,则获取其他undo segment中inactive的;
e. 如果以上步骤均无法获得可用空间时,报空间不足的错误消息.
从这里可以看出,在AUM里,分配undo块的算法不仅有效,而且会尽可能地将INACTIVE
状态的extents保留足够长的时间。在Oracle10g里,如果undo表空间有足够的可用空间
,则Oracle会将undo信息保留的时间与当前运行时间最长的那个查询所需要的时间相同。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-669972/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/35489/viewspace-669972/
本文介绍了Oracle数据库中Undo Retention参数的作用及其如何影响Undo块的状态转换,包括Active、Inactive、Expired和Freed四种状态。此外还详细阐述了在Automatic Undo Management (AUM)模式下,Oracle如何动态分配Undo空间。
865

被折叠的 条评论
为什么被折叠?



