面试题答案
一键面试重做(Redo)操作
- 原理:已提交事务对数据的修改在崩溃前可能还未完全持久化到数据库中。重做操作通过重新应用事务日志中已提交事务的记录,将这些修改重新应用到数据库,确保已提交事务的持久性。
- 流程:
- 从日志文件末尾开始向前扫描日志记录。
- 对于每一条日志记录,检查其事务状态是否为已提交(通常通过事务的提交记录标识)。
- 如果是已提交事务的记录,根据日志记录中的操作(如对某个数据项的更新值),重新执行这些操作,将数据恢复到崩溃前已提交事务完成后的状态。
回滚(Undo)操作
- 原理:未提交事务在系统崩溃时,其对数据的修改不应该被持久化。回滚操作通过反向应用事务日志中未提交事务的记录,将数据恢复到事务开始前的状态,保证事务的原子性。
- 流程:
- 从日志文件末尾开始向前扫描日志记录。
- 对于每一条日志记录,检查其事务状态是否为未提交(没有事务的提交记录标识)。
- 如果是未提交事务的记录,根据日志记录中的操作进行反向操作(例如,如果是更新操作,就将数据恢复为更新前的值,通常日志记录中会保存旧值)。这个过程持续进行,直到事务的开始记录,从而将未提交事务对数据的修改全部撤销。