Redo Log(重做日志)和 Undo Log(撤销日志)是数据库系统中用于确保数据完整性和事务一致性的两种不同类型的日志。它们在处理事务、尤其是事务回滚和系统恢复时起着关键作用。
Redo Log(重做日志)
作用:确保事务的持久性。即使在系统故障或崩溃后,已提交的事务所做的更改也不会丢失。
内容:记录了事务对数据库所做的更改,即修改后的数据(例如,更新后的记录)。
写入时机:通常在数据修改之前写入 Redo Log,确保在数据实际写入磁盘前,日志已经被安全地记录。
使用场景:
- 系统崩溃后重启时,数据库系统使用 Redo Log 来恢复未写入磁盘的数据。
- 数据库的备份和恢复操作中,Redo Log 用于同步数据。
特点:顺序写入,保证日志的连续性,便于恢复。
Undo Log(撤销日志)
- 作用:提供事务的原子性,用于回滚事务。
- 内容:记录了事务对数据库所做的更改的逆操作,即修改前的数据(例如,更新前的记录)。
- 写入时机:在数据修改的同时,Undo Log 被写入,以便在需要回滚时撤销更改。
- 使用场景:
- 事务执行过程中,如果发生错误或用户手动回滚,使用 Undo Log 来撤销已做的更改。
- 多版本并发控制(MVCC)中,Undo Log 用于提供数据的旧版本给其他事务读取。
- 特点:Undo Log 通常不会像 Redo Log 那样长期存在,它们在事务提交或回滚后可能会被清除。
总结来说,Redo Log 保证了事务的持久性,而 Undo Log 保证了事务的原子性。两者在数据库系统中起着互补的作用,共同维护了数据库的一致性和可靠性。