在数据库管理系统中,事务的持久性和一致性是至关重要的。为了保证在系统崩溃或发生故障时数据不会丢失,数据库引入了恢复机制。其中,REDO日志和UNDO日志是两种关键的恢复技术。本文将详细描述这两种日志的作用、工作原理以及它们在数据库崩溃恢复中的应用。
REDO日志
REDO日志用于确保已提交事务的修改能够持久化到数据库中。当一个事务提交时,它的所有修改都会被记录在REDO日志中。在系统崩溃后,使用REDO日志可以重做(redo)这些修改,确保它们被完整地应用到数据库中。
工作原理
- 当一个事务对数据库进行修改时,首先将修改记录到REDO日志的缓冲区中。
- 在事务提交之前,这些修改不会被写入到磁盘上的REDO日志文件中。
- 事务提交时,REDO日志缓冲区中的内容会被刷新到磁盘上的REDO日志文件中。
- 在系统崩溃后,数据库恢复过程会读取REDO日志文件,并重做所有已提交事务的修改,确保这些修改被应用到数据库中。
UNDO日志
UNDO日志用于撤销未提交事务对数据库的修改。当一个事务开始执行时,它的所有修改都会被记录在UNDO日志中。在系统崩溃后,使用UNDO日志可以撤销(undo)这些修改,恢复数据库到事务开始前的状态。
工作原理
- 当一个事务对数据库进行修改时,首先将修改记录到UNDO日志的缓冲区中。
- 在事务提交之前,这些修改不会被写入到磁盘上的UNDO日志文件中。
- 如果事务需要回滚,数据库恢复过程会读取UNDO日志文件,并撤销所有未提交事务的修改,恢复数据库到事务开始前的状态。
- 在系统崩溃后,数据库恢复过程也会使用UNDO日志来撤销所有未提交事务的修改