Database System Concepts——读书笔记 第十九章 恢复系统

系统崩溃后,系统会检查日志以找到最后一个<checkpoint L>记录(这可以通过从日志末尾向后搜索日志来完成,直到找到第一个<checkpoint L>记录),L是检查点时活动的事务列表
重做或撤消操作只需要应用于L中的事务,以及在<checkpoint L>记录写入日志后开始执行的所有事务。让我们将这组事务表示为T。

  • 对于T中没有记录或的所有事务Tk在日志中记录,执行undo(Tk)。
  • 对于T中的所有事务Tk,使得记录或记录<Tk abort>出现在日志中,执行重做(Tk)。

请注意,事务或代表事务执行的每个更新操作,包括将数据项恢复到其旧值所采取的操作(如:回滚操作),现在都已记录在日志中。

当数据库系统在崩溃后重新启动时,恢复操作分为两个阶段:
在redo阶段,系统通过从最后一个检查点向前扫描日志来回放所有事务的更新。重放的日志记录包括系统崩溃前回滚的事务的日志记录,以及系统崩溃发生时未提交的事务的记录。此阶段还确定崩溃时未完成的所有事务,因此必须回滚这些事务。这种不完整的事务要么在检查点时是活动的,因此会出现在检查点记录的事务列表中,要么会在之后开始;此外,这种不完整的事务既没有也没有记录在日志中。
在redo阶段结束时,undo list包含所有未完成事务的列表,也就是说,它们在崩溃之前既没有提交也没有完成回滚。
在undo阶段,系统回滚undo list中的所有事务。它通过从日志末尾向后扫描日志来执行回滚。
a.每当它在undo list中找到属于某个事务的日志记录时,它都会执行撤消操作,就像在回滚失败事务时找到日志记录一样, 并且将redo-only log写入日志。
b.当系统在undo list中找到事务Ti的日志记录时,它会将日志记录写入日志,并从undo list中删除Ti。
c.一旦undo list变为空,即系统已找到最初在撤消列表中的所有事务的日志记录,undo阶段即终止。

redo阶段尽管这可能看起来很浪费,但即使对于失败的事务重复历史记录也可以简化恢复方案

数据库恢复子系统的常见技术和方案对比(二)

posted @   sahara-随笔  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示