Oracle读一致性实现:Undo表空间详解
需积分: 49 123 浏览量
更新于2024-08-15
收藏 498KB PPT 举报
"Oracle数据库通过其Undo表空间来实现读一致性,确保用户在查询时看到的数据是一致的,即使在并发事务环境下。读一致性依赖于系统改变号(SCN)和Undo块,使得用户在开始读取数据时,能够看到事务开始时的数据状态。以下是对Oracle读一致性机制的详细解释:
1. SCN(System Change Number)是Oracle数据库用于追踪事务的唯一序列号,它随时间递增。当用户执行查询时,Oracle记录下查询开始时的SCN(例如SCN9.00)。SCN是确定数据是否被修改的关键。
2. 在查询过程中,Oracle服务器进程会检查数据块头部的ITL(Intent To Lock)槽中的SCN。如果数据块的SCN小于查询开始时的SCN,说明该数据块在查询开始后未被修改,可以直接读取。如果SCN大于查询开始时的SCN,表示数据已被修改,此时服务器进程会查找与ITL槽对应的Undo块来获取旧数据。
3. Undo块存储了对数据的原始版本,这些信息在DML(数据操纵语言)操作如UPDATE、INSERT或DELETE时产生。当数据被修改,Oracle会在Undo表空间中保存修改前的值。Undo管理有两种模式:自动Undo管理(AUM)和手工Undo管理(MUM),9i版本之后推荐使用AUM。
4. DML语句执行流程中,Oracle首先解析语句并生成执行计划,然后找到需要修改的数据块。在修改数据前,Oracle会先在Undo表空间中分配Undo块保存原始值,并生成重做日志记录。修改完成后,如果数据块变化,会产生新的重做日志记录,同时将事务状态标记为已提交。
5. Undo的主要作用包括提供读一致性、回滚事务和实例恢复。在读一致性场景中,即使在数据被其他事务修改的情况下,用户仍能获取到查询开始时的数据视图。例如,如果用户需要15分钟获取表T的所有10000条记录,即使在此期间有其他事务对表T进行修改,用户仍能看到一致性视图,而不会看到未提交的修改。
Oracle的读一致性机制通过SCN、Undo表空间和重做日志确保了数据的稳定视图,防止了脏读问题。这种机制在多用户并发环境中尤为重要,保证了数据的一致性和事务的隔离性。
2020-12-23 上传
2014-02-18 上传
2019-03-17 上传
2023-05-20 上传
2024-11-02 上传
2023-12-29 上传
2023-06-28 上传
2023-03-28 上传
2023-07-11 上传
顾阑
- 粉丝: 19
- 资源: 2万+
最新资源
- C语言数组操作:高度检查器编程实践
- 基于Swift开发的嘉定单车LBS iOS应用项目解析
- 钗头凤声乐表演的二度创作分析报告
- 分布式数据库特训营全套教程资料
- JavaScript开发者Robert Bindar的博客平台
- MATLAB投影寻踪代码教程及文件解压缩指南
- HTML5拖放实现的RPSLS游戏教程
- HT://Dig引擎接口,Ampoliros开源模块应用
- 全面探测服务器性能与PHP环境的iprober PHP探针v0.024
- 新版提醒应用v2:基于MongoDB的数据存储
- 《我的世界》东方大陆1.12.2材质包深度体验
- Hypercore Promisifier: JavaScript中的回调转换为Promise包装器
- 探索开源项目Artifice:Slyme脚本与技巧游戏
- Matlab机器人学习代码解析与笔记分享
- 查尔默斯大学计算物理作业HP2解析
- GitHub问题管理新工具:GIRA-crx插件介绍