Database 在ARIES恢复方法中重复历史记录有什么好处?

Database 在ARIES恢复方法中重复历史记录有什么好处?,database,algorithm,rdbms,recovery,aries,Database,Algorithm,Rdbms,Recovery,Aries,在中,为什么需要在重做过程中重复崩溃之前的所有历史? 我是否可以在分析过程中获取提交的事务编号,然后重做提交的事务日志记录?此方法将减少需要重做和撤消的记录数。原因是ARIES设计用于无强制/窃取方法。“窃取”部分意味着来自未受限制事务的更改可能会写入磁盘。因此,我们需要重做所有已提交和未提交的事务,以便可以撤消未提交的事务。简短回答: 我们需要在重做过程中重复崩溃之前的所有历史记录,以确保在执行撤消过程之前数据库的一致性 长答覆: 为了确保DBMS的原子性和耐久性,执行3个过程: 分析过程:查

在中,为什么需要在重做过程中重复崩溃之前的所有历史?
我是否可以在分析过程中获取提交的事务编号,然后重做提交的事务日志记录?此方法将减少需要重做和撤消的记录数。

原因是ARIES设计用于无强制/窃取方法。“窃取”部分意味着来自未受限制事务的更改可能会写入磁盘。因此,我们需要重做所有已提交和未提交的事务,以便可以撤消未提交的事务。

简短回答: 我们需要在重做过程中重复崩溃之前的所有历史记录,以确保在执行撤消过程之前数据库的一致性

长答覆: 为了确保DBMS的原子性和耐久性,执行3个过程:

  • 分析过程:查看需要执行的操作(向前播放日志)
  • 重做过程:确保磁盘反映日志中但不在磁盘上的任何更新,包括那些属于最终将回滚的事务的更新。这样可以确保我们处于一致状态,这将允许逻辑撤消
  • 撤消传递:删除任何丢失事务的操作
  • 撤消数据日志是逻辑日志,而重做数据日志是物理日志:

    • 我们必须进行物理重做,因为我们不能保证数据库处于一致状态(例如,记录“将值X插入表Y”可能不是一个好主意,因为X可能会反映在索引中,但不会反映在表中,反之亦然,以防插入时发生崩溃)
    • 我们可以做逻辑撤销,因为重做后我们知道事情是一致的。事实上,我们必须执行逻辑撤消,因为我们只撤消了一些操作,并且表单撤消的物理日志记录,例如,“索引y的拆分页x”可能不再是索引管理或不变维护方面的正确操作。在重做过程中,我们不必担心这一点,因为我们会重复历史记录并重放所有内容,这意味着上次对数据库所做的任何物理修改都是正确的

    谢谢。我找到了一个更合理的答案。为了支持细粒度锁,它必须重做所有更新,即使是未提交的更新。ARIES论文第10.1节对此进行了描述,并与选择性重做方法进行了比较。