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

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

白话Oracle重做与撤销:数据库的"后悔药"和"时光机"

大家好!今天咱们来聊聊Oracle数据库里两个特别重要的功能——重做(redo)和撤销(undo)。这俩就像是数据库的"后悔药"和"时光机",保证数据安全的同时还能让你反悔操作。

一、重做日志:数据库的"时光机"

想象一下重做日志就像飞机的黑匣子,记录着数据库所有的操作。它分两种:

  1. 在线重做日志:相当于实时录音笔,正在记录当前发生的事
  2. 归档重做日志:就是把录满的录音笔存档保管
它能干啥?
  • 突然断电:就像你正写作业突然停电,来电后可以根据记录接着写,不会丢数据
  • 硬盘坏了:好比笔记本被水泡了,用备份本+录音记录能恢复所有内容
  • 手滑删库:像不小心删了重要文件,用备份+记录能回到删除前的状态

现代Oracle还有个更厉害的"时间倒流"功能(闪回技术),可以直接查看过去某个时间点的数据,或者把表恢复到之前的样子。

特别提醒:对DBA来说,数据恢复是最重要的技能,绝对不能出错!

二、撤销数据:数据库的"后悔药"

撤销功能就像word里的撤销键,但更智能。它会把你的每一步操作都记下来,这样:

  • 写错可以回退(CTRL+Z)
  • 事务出错自动回滚
  • 不同人同时查数据时互不干扰
有趣的现象

很多人以为撤销是把数据"原样退回",其实不是。举个例子:

  1. 你新建个空表(就像买个新本子)
  2. 往里面狂写数据(写满100页)
  3. 突然反悔,选择撤销

你以为本子会变回全新的?其实不是!本子还是那个写过的本子,只是内容被清空了。下次再用时,系统需要翻遍所有页确认是否为空,所以会变慢。

三、实际应用小贴士

  1. 新建表的小秘密:用默认方式建表时,实际还没分配空间(就像买了本子但还没拆包装),只有第一次写入时才真正"拆封"
  2. 撤销不释放空间:就像你写了又擦掉,本子页数不会减少,只是内容空了
  3. 多人协作时:你的撤销不会影响别人正在写的内容,非常智能

总结

  • 重做日志 = 黑匣子:保证数据安全,出问题能恢复
  • 撤销数据 = 智能撤销键:支持回滚和多用户同时工作

理解这两个机制,就像知道了数据库的"生存法则",能帮你更好地设计系统,出了问题也知道怎么应对。记住,在数据库世界里,"后悔药"和"时光机"都是真实存在的!

------------------作者介绍-----------------------

姓名:黄廷忠 现就职:Oracle中国高级服务团队 曾就职:OceanBase、云和恩墨、东方龙马等 电话、微信、QQ:18081072613

个人博客: (http://www.htz.pw)

CSDN地址: (https://blog.csdn.net/wwwhtzpw)

博客园地址: (https://www.cnblogs.com/www-htz-pw)

读书笔记:白话Oracle重做与撤销:数据库的"后悔药"和"时光机"_重做日志