读书笔记:深入浅出:Oracle中的重做(Redo)与撤销(Undo)如何协同工作

我们的文章会在微信公众号IT民工的龙马人生博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。

本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。

深入浅出:Oracle中的重做(Redo)与撤销(Undo)如何协同工作

什么是重做和撤销?

想象你正在玩一个电子游戏,游戏有两个神奇功能:

  1. 撤销(Undo):就像"后悔药",可以让你回到上一步操作前的状态
  2. 重做(Redo):就像"时光机",可以重现你之前的所有操作

Oracle数据库正是用这两个机制来确保数据安全,即使系统崩溃也不会丢失重要信息。

一个生动例子

假设我们在数据库中执行以下操作:

  1. 新增一条数据(INSERT)
  2. 修改这条数据(UPDATE)
  3. 删除这条数据(DELETE)
  4. 最后确认保存(COMMIT)

让我们看看每个步骤中重做和撤销如何工作。

1. 新增数据(INSERT)

发生了什么

  • 数据库会同时做两件事:
    • 记下"撤销笔记"(Undo):记录如何删除这条新增的数据
    • 记下"重做笔记"(Redo):记录如何重新新增这条数据

如果突然断电

  • 因为还没确认保存,就像你写了一半的短信没发送
  • 重启后,系统发现这个操作没完成,自动丢弃这个半成品

2. 修改数据(UPDATE)

发生了什么

  • 这次"撤销笔记"更详细:记录修改前的原始值
  • "重做笔记"记录修改后的新值

有趣的现象

  • 即使系统崩溃,重启后:
    • 先用"重做笔记"重现已记录的操作
    • 再用"撤销笔记"回滚未完成的操作
  • 就像游戏自动帮你恢复到最近的安全点

3. 删除数据(DELETE)

发生了什么

  • "撤销笔记"记录被删除的完整数据
  • "重做笔记"记录删除操作本身

4. 确认保存(COMMIT)

关键时刻

  • 这时数据库会确保所有"重做笔记"都安全写入硬盘
  • 即使之后系统崩溃,也能100%恢复已确认的数据

为什么撤销信息也需要重做保护?

这就像你不仅记下要做的事情清单(重做),还记下了"如果后悔该怎么办"的说明(撤销)。为了保证万无一失,连"后悔说明"本身也需要备份!

实际应用中的智慧

  1. 回滚比想象中简单

    • 回滚时不需要读重做日志,直接从撤销信息操作
    • 就像你不需要重看所有操作录像,直接按撤销说明操作就行
  2. 系统设计精妙之处

    • 重做日志主要是顺序写入,很少读取
    • 这种设计避免了读写冲突,提高了性能
  3. 崩溃恢复机制

    • 先重放所有操作(前滚)
    • 再撤销未完成的操作(回滚)
    • 确保数据文件最终一致

总结

Oracle通过重做和撤销的双重保障:

  • 重做日志像飞机的黑匣子,记录所有操作
  • 撤销信息像应急手册,提供回退方案
    两者配合,确保数据在任何情况下都能保持一致性,就像有个24小时不休息的数据保镖,随时准备应对各种意外情况。

------------------作者介绍-----------------------
姓名:黄廷忠
现就职:Oracle中国高级服务团队
曾就职:OceanBase、云和恩墨、东方龙马等
电话、微信、QQ:18081072613
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)

posted @ 2025-09-03 16:08  认真就输  阅读(19)  评论(0)    收藏  举报