在ARIES恢复方法中重复历史的好处是什么?

时间:2012-12-07 02:45:25

标签: database algorithm rdbms recovery aries

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

2 个答案:

答案 0 :(得分:3)

简答:

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

答案很长:

recovery algorithm ARIES,为了确保DBMS的原子性和持久性属性,执行3次传递:

  1. 分析通行证:看看需要做什么(播放日志)
  2. 重做传递:确保磁盘反映日志中但不在磁盘上的所有更新,包括属于最终将回滚的事务的更新。这样,它可以确保我们处于 一致状态 ,这将允许逻辑撤消。
  3. 撤消传递:删除任何丢失交易的操作
  4. UNDO数据日志是合乎逻辑的,而REDO数据日志是物理的:

    • 我们必须进行物理REDO,因为我们无法保证数据库处于一致状态(因此,例如,记录“INSERT VALUE X INTO TABLE Y”可能不是一个好主意,因为X可能会反映在如果在插入时发生崩溃,则索引但不是表,反之亦然,
    • 我们可以做逻辑UNDO,因为在REDO之后我们知道事情是一致的。实际上,我们必须进行逻辑UNDO,因为我们只对UNDO进行了一些操作,并且形式的UNDO的物理日志记录,例如“索引y的拆分页面x”在索引管理或不变量方面可能不再是正确的做法保养。我们在重做期间不必担心这一点,因为我们重复历史并重放所有内容,这意味着上次对数据库进行的任何物理修改仍然是正确的。

    Source

答案 1 :(得分:0)

原因是因为ARIES旨在使用无力/偷窃方法。 “窃取”部分意味着可以将来自未通信事务的更改写入磁盘。因此,我们需要重做所有已提交和未提交的事务,因此我们可以撤消未提交的事务。