恢复实现 日志 后像后写 回 ■恢复管理器执行步骤: ◆①从后向前扫描日志,将提交的事务放入队列redo-list。 ◆②从前往后扫描日志。对遇到的每一<T,X,VI>记录: ●如果T不是redo-list中的事务,则什么也不做。 ●如果T是redo-list中的事务,则为数据项X写入值Vh。 ◆③对每个未完成的事务,在日志中写入一个<T,AB0T>记录并刷新日 志。 学以致用 DATABASE@UESTC 用以促学
学以致用 DATABASE@UESTC 用以促学 ◼ 恢复管理器执行步骤: ◆① 从后向前扫描日志,将提交的事务放入队列redo-list。 ◆② 从前往后扫描日志。对遇到的每一<T,X,V1>记录: ⚫ 如果T不是redo-list中的事务,则什么也不做。 ⚫ 如果T是redo-list中的事务,则为数据项X写入值V1。 ◆③ 对每个未完成的事务,在日志中写入一个<T,ABORT>记录并刷新日 志
恢复实现 日志 后像后写 ☒ ■恢复管理器对故障发生在不同时刻的不同处理 <TI START> <TI START> <TI START> <TI START <T1,A,22> <T1,A,22> <T1A,22> <T1,A.22> <T1,B,28.5> <T1,B,28.5> <T1,B,28.5> <T1,B,28.5> <T1,COMMIT> <TI.COMMIT> <T1,COMMIT> 若<T1 COMMIT> 写A到磁盘 写A到磁盘 在磁盘,同(C) 写B到磁盘 (a) (b) c) (d) 若<T1 COMMIT> <T1 ABORT> 不在磁盘,同(a REDO 再次REDO 学以致用 用以促学 DATABASE@UESTC
学以致用 DATABASE@UESTC 用以促学 ◼ 恢复管理器对故障发生在不同时刻的不同处理 <T1 START> <T1 START> <T1 START> <T1 START> <T1,A,22> <T1,A,22> <T1,A,22> <T1,A,22> <T1,B,28.5> <T1,B,28.5> <T1,B,28.5> <T1,B,28.5> <T1,COMMIT> <T1,COMMIT> 写A 到磁盘 写A 到磁盘 写B 到磁盘 ( a) (b) (c ) (d) <T1,COMMIT> <T1 ABORT> REDO 再次REDO 若<T1 COMMIT> 在磁盘,同(C) 若<T1 COMMIT> 不在磁盘,同(a)