学习笔记 | redo和undo的区别

学习笔记 | redo和undo的区别redo 和 undo 区别讨论名词 两种流程 redo 重做流程 undo 撤销还原流程 或者是 redo 日志与 undo 段的简称

redo和undo区别讨论

  • 名词:两种流程,redo重做流程,undo撤销还原流程;或者是redo日志与undo段的简称。
  • 动词:redo即重做,undo即撤销还原。

翻译有时候为了简单,常把动词和名称混用。不同场景不同的使用。

1. redo记录了什么:
  • redo即redo日志,记录数据库变化的日志(区别我们常见的简单的文本日志,redo日志里面记录的都是数据啊,表数据啊等等压缩处理,但也很大)。
  • 只要你修改了数据块那么就会记录redo信息,当然nologging除外了。

修改的数据块包括:表所在数据块(表数据块),索引所在数据块(索引数据块),以及undo段所在数据块(undo数据块)!!!

2. undo记录了什么:
  • undo即undo段,是指数据库为了保持读一致性,存储历史数据在一个位置。
为什么要保持读一致性?
  • 比如有两个用户访问数据库,当然并发咯。A是更改,B是查询。
  • A更改还没有提交,B查询的话,数据肯定为历史数据,这个历史数据就是来源于UNDO段,
  • A更改未提交,需要回滚rollback,回滚rollback的数据也来至于UNDO段。

结论:为了并发时读一致性成功,那么DML操作,肯定先写UNDO段。

3. 前滚与回滚:
方向相对性:
  • 前滚,是指从“以前正常点”往前,一直到崩溃点。
  • 回滚,是指从“崩溃点”往后,一直到数据一致性。

(因为前滚操作后,由于事务未提交的数据也写入了“表数据块”,所以要用Undo数据块进行覆盖。

– 详细解释:

前滚:当实例崩溃时,可以使用redo从以前正常的点前滚到崩溃点。(前滚从一致性检查点,“即当时检查过所有的SCN是全部一致的时间点”,一直往前滚到崩溃的时间点)。当数据库回到一致性检查点时,相当于之后什么都没有发生过,数据全被清空了。数据库只好根据redo模拟人的操作,使用redo里的信息重做(use redo log to redo),构造undo块,表块,索引块等。

回滚:构造的表数据块中,有已修改的脏数据但未提交,就需要利用前滚中构造的undo数据块里的信息来undo撤销还原,覆盖回滚rollback罗(保持一致性啊,每种块里的scn号都一样,那么数据库就可以打开了)。

4. undo与redo(流程)的联系:
  • 因为,数据在没有commit前,是随时从内存中写入到表数据块的,属于脏数据。 数据库崩溃后即使使用redo流程进行redo操作,但是脏数据还在,脏数据怎么处理,就只能靠undo流程,使用undo数据块的旧数据覆盖了。
  • 但是不管是脏的还是旧的,都在redo日志中复制了一份。

注意:

  1. undo是一种“数据文件datafile”,具有表空间,当然具有块block;
  2. redo是一种“文件file”,没有表空间。
  3. 数据库在DML事务时,先创建undo
  4. 读一致性与一致性(scn相同)的区别。
  5. undorollback的区别:在undo(撤销还原流程)中会使用rollback(回滚)这个动作。
今天的文章 学习笔记 | redo和undo的区别分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-19 08:17
下一篇 2024-12-19 08:11

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/90845.html