读书笔记:深入浅出:Oracle中的重做(Redo)与撤销(Undo)如何协同工作
我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。
本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。
深入浅出:Oracle中的重做(Redo)与撤销(Undo)如何协同工作
什么是重做和撤销?
想象你正在玩一个电子游戏,游戏有两个神奇功能:
- 撤销(Undo):就像"后悔药",可以让你回到上一步操作前的状态
- 重做(Redo):就像"时光机",可以重现你之前的所有操作
Oracle数据库正是用这两个机制来确保数据安全,即使系统崩溃也不会丢失重要信息。
一个生动例子
假设我们在数据库中执行以下操作:
- 新增一条数据(INSERT)
- 修改这条数据(UPDATE)
- 删除这条数据(DELETE)
- 最后确认保存(COMMIT)
让我们看看每个步骤中重做和撤销如何工作。
1. 新增数据(INSERT)
发生了什么:
- 数据库会同时做两件事:
- 记下"撤销笔记"(Undo):记录如何删除这条新增的数据
- 记下"重做笔记"(Redo):记录如何重新新增这条数据
如果突然断电:
- 因为还没确认保存,就像你写了一半的短信没发送
- 重启后,系统发现这个操作没完成,自动丢弃这个半成品
2. 修改数据(UPDATE)
发生了什么:
- 这次"撤销笔记"更详细:记录修改前的原始值
- "重做笔记"记录修改后的新值
有趣的现象:
- 即使系统崩溃,重启后:
- 先用"重做笔记"重现已记录的操作
- 再用"撤销笔记"回滚未完成的操作
- 就像游戏自动帮你恢复到最近的安全点
3. 删除数据(DELETE)
发生了什么:
- "撤销笔记"记录被删除的完整数据
- "重做笔记"记录删除操作本身
4. 确认保存(COMMIT)
关键时刻:
- 这时数据库会确保所有"重做笔记"都安全写入硬盘
- 即使之后系统崩溃,也能100%恢复已确认的数据
为什么撤销信息也需要重做保护?
这就像你不仅记下要做的事情清单(重做),还记下了"如果后悔该怎么办"的说明(撤销)。为了保证万无一失,连"后悔说明"本身也需要备份!
实际应用中的智慧
-
回滚比想象中简单:
- 回滚时不需要读重做日志,直接从撤销信息操作
- 就像你不需要重看所有操作录像,直接按撤销说明操作就行
-
系统设计精妙之处:
- 重做日志主要是顺序写入,很少读取
- 这种设计避免了读写冲突,提高了性能
-
崩溃恢复机制:
- 先重放所有操作(前滚)
- 再撤销未完成的操作(回滚)
- 确保数据文件最终一致
总结
Oracle通过重做和撤销的双重保障:
- 重做日志像飞机的黑匣子,记录所有操作
- 撤销信息像应急手册,提供回退方案
两者配合,确保数据在任何情况下都能保持一致性,就像有个24小时不休息的数据保镖,随时准备应对各种意外情况。
------------------作者介绍-----------------------
姓名:黄廷忠
现就职:Oracle中国高级服务团队
曾就职:OceanBase、云和恩墨、东方龙马等
电话、微信、QQ:18081072613
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)

浙公网安备 33010602011771号