在 Oracle 数据库中,关于 Undo 段的描述,下列哪一项是正确的?
A Undo 数据确保在长时间运行的查询中,即使原数据被修改,查询仍能读取到开始时的数据快照。
B Undo 段仅用于事务回滚,不参与读一致性。
C Undo 段存储了所有已提交事务的变更,用于数据库恢复。
D Undo 表空间的大小固定,无法自动扩展。
正确答案是:A
详细解析:
选项A正确性分析
Undo 段通过保存数据修改前的镜像(旧值),为长时间运行的查询提供读一致性。具体机制如下:
- SCN 机制:当查询开始时,Oracle 会记录当前系统变更号(SCN)。若查询过程中数据块被其他事务修改(SCN 号更新),Oracle 会通过 Undo 段中的旧数据构造一致性读(CR)块,确保查询看到的是开始时的数据快照。
- 实际案例:假设一个查询耗时10分钟,期间其他事务删除了部分数据。通过 Undo 段中的旧数据,查询仍返回原始数据量,保证逻辑一致性。
- 技术支撑:Undo 段与 ITL(事务槽)交互,通过回滚指针定位旧数据版本,避免脏读。
其他选项错误原因
选项B错误
Undo 段不仅用于事务回滚,还直接参与读一致性。例如:
• 事务隔离性:未提交的事务修改对其他用户的查询不可见,依赖 Undo 段保存的旧值。
• 一致性读视图:Oracle 通过 Undo 段构建逻辑一致的数据镜像,支持并发场景下的多版本控制(MVCC)。
选项C错误
Undo 段仅存储未提交事务的变更前数据,已提交事务的变更由 Redo 日志处理。例如:
• 事务提交后,Redo 日志确保变更持久化,而 Undo 段中对应的旧数据可能被覆盖。
• 实例恢复时,Redo 重做已提交事务,Undo 仅回滚未提交事务。
选项D错误
Undo 表空间支持自动扩展和动态管理:
- 自动扩展:通过
AUTOEXTEND ON参数配置数据文件自动扩容。 - 优化策略:Oracle 自动调整
undo_retention参数,根据最长查询时间动态保留 Undo 数据,避免空间不足。
总结
Undo 段的核心功能是支持事务回滚、读一致性和实例恢复,其中选项A正确体现了读一致性这一关键特性。其他选项或因功能片面(如B)、混淆存储对象(如C)或忽略自动管理机制(如D)而不成立。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




