正德厚生,臻于至善

Oracle undo retention guarantee

单选题
在( )情况下 UNDO_RETENTION 参数即使设置了,也不起作用
A.
当 undo 表空间的数据文件是自动扩展的时候
B.
当数据库有不只一个 undo 表空间可用的时候
C.
当 undo 表空间是固定尺寸且 retention guarantee 没有启用的时候
D.
当 undo 表空间是自动扩展且 retention guarantee 没有启用的时候
正确答案:C
【题目解析】 
本题考察Oracle数据库中UNDO_RETENTION参数生效的约束条件。当undo表空间为固定尺寸且未启用retention guarantee时,即使设置UNDO_RETENTION参数也不会生效。这是因为系统会优先保证事务回滚功能,而非保留旧数据以满足查询一致性需求。

选项解析
A. 自动扩展的undo表空间:错误。自动扩展模式下,系统会尽量维持UNDO_RETENTION设置,通过扩展数据文件保留旧数据。
B. 多undo表空间:错误。参数生效与否与表空间数量无关,仅取决于空间管理方式和retention设置。
C. 固定尺寸+未启用retention guarantee:正确。此时空间不足会覆盖最早未提交事务的undo数据,参数失效。
D. 自动扩展+未启用retention guarantee:错误。自动扩展机制仍会尝试满足保留时间要求。
关键机制说明
retention guarantee的作用:启用后强制保留undo数据至指定时间,即使牺牲新事务也会优先保障查询一致性。
空间优先级规则:固定尺寸表空间中,新事务的undo需求始终优先于UNDO_RETENTION的保留要求。
易混淆点
自动扩展与参数生效的关系:自动扩展仅是尝试满足保留时间的条件之一,若同时启用retention guarantee则约束更强。
固定尺寸的隐含风险:未启用retention guarantee时,高峰事务可能导致历史查询出现"ORA-01555"快照过旧错误。

undo_retention这个参数指定了undo表空间中的数据的最大保留时间,单位为秒,是动态参数,也就是说我们可以在实例运行的时候对这个参数进行修改,默认值为900s(15min)。undo_retention只是指定了undo数据的过期时间,并不是说undo中的数据一定会在表空间中保留15min。当undo表空间已被写满,新的事务就会自动覆盖那些已经提交的事务数据,而不会去理会这些数据是否已经过期。
undo_retention指定的时间一过,已提交的数据就立刻无法访问,它只是失效,但是只要没有被新数据覆盖就仍然存在,并且可随时被flashback特性引用。如果undo表空间足够大,而数据库又不是那么繁忙,那么undo_retention的值并不会有影响,只要没有事务去覆盖undo数据,就会持续有效。
只有一种情况,undo表空间能够确保undo数据在undo_retention指定的时间前一定有效,那就是为undo表空间指定retention guarantee,指定之后,对于undo表空间那些没有过期的数据就不会被覆盖。
可用如下命令查看当前数据库中undo的retention guarantee:

默认为noguarantee:
select tablespace_name,contents,retention from dba_tablespaces;

用如下命令修改undotbs1的retention guarantee:
alter tablespace undotbs1 retention guarantee;

select tablespace_name,contents,retention from dba_tablespaces;

使用如下命令禁止使用retention guarantee:
alter tablespace undotbs1 retention noguarantee;

select tablespace_name,contents,retention from dba_tablespaces;
赞(0) 打赏
未经允许不得转载:徐万新之路 » Oracle undo retention guarantee

支持快讯、专题、百度收录推送、人机验证、多级分类筛选器,适用于垂直站点、科技博客、个人站,扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、文章图片弹窗、自动缩略图等...

联系我们

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册