自学内容网 自学内容网

Redo与Undo的区别:数据库事务的恢复与撤销机制

在数据库中,redo 和 undo 是两个非常重要的概念,它们主要用于事务管理和恢复机制,确保数据的一致性和完整性。

下面分别解释这两个概念:

Redo(重做)

定义:redo 操作记录了事务对数据库所做的所有修改。这些记录存储在重做日志(Redo Log)中。

作用

  1. 事务持久性:确保事务在提交后,即使数据库发生故障,也能够恢复到事务提交后的状态。
  2. 恢复机制:在数据库故障恢复时,重做日志中的记录可以被用来重新应用对数据库的修改,使数据库恢复到故障前的状态。

工作原理

  • 当事务对数据库进行修改时,数据库会将这些修改记录写入重做日志。
  • 事务提交后,这些重做日志记录会被写入磁盘,以确保事务的持久性。
  • 如果数据库发生故障,重启后可以通过重做日志重新应用这些记录,恢复数据库。

Undo(撤销)

定义:undo 操作记录了事务开始前数据库的状态。这些记录存储在撤销日志(Undo Log)中。

作用

  1. 事务回滚:如果事务需要回滚,撤销日志中的记录可以用来撤销事务对数据库所做的修改。
  2. 多版本并发控制(MVCC):在支持多版本并发控制的数据库中,撤销日志用于生成不同版本的数据,以便事务可以读取事务开始时的数据快照。

工作原理

  • 当事务开始时,数据库会记录事务开始前的数据状态到撤销日志。
  • 如果事务需要回滚,数据库会使用撤销日志中的记录来恢复数据到事务开始前的状态。
  • 在多版本并发控制中,撤销日志中的记录用于生成旧版本的数据,以便事务在读取数据时可以读取到事务开始时的数据快照,而不是当前最新的数据。

示例

假设有一个事务 T1,它修改了表 Orders 中的一条记录:

  1. Redo

    • 事务 T1 开始修改记录。
    • 数据库将这些修改记录写入重做日志。
    • 事务 T1 提交。
    • 重做日志中的记录被写入磁盘,确保事务的持久性。
  2. Undo

    • 事务 T1 开始时,数据库记录了 Orders 表中该记录的初始状态到撤销日志。
    • 如果事务 T1 需要回滚,数据库会使用撤销日志中的记录来恢复 Orders 表中的记录到事务开始前的状态。
    • 在多版本并发控制中,如果另一个事务 T2 开始时 T1 还未提交,T2 会读取撤销日志中的记录来获取 T1 开始时的数据快照。

总结

  • Redo:记录事务对数据库的修改,用于事务的持久性和数据库的恢复。
  • Undo:记录事务开始前的状态,用于事务的回滚和多版本并发控制。

通过 redo 和 undo 机制,数据库能够确保事务的ACID(原子性、一致性、隔离性、持久性)属性,从而维护数据的一致性和完整性。


原文地址:https://blog.csdn.net/qq_61504864/article/details/143665433

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!