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

标签 database algorithm rdbms recovery aries

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

最佳答案

简答:

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

长答案:

recovery algorithm ARIES , 为了保证 DBMS 的原子性和持久性, 执行 3 pass:

  1. Analysis pass:查看需要做什么(向前播放对数)
  2. Redo pass:确保磁盘反射(reflect)日志中但不在磁盘上的任何更新,包括那些属于最终将被回滚的事务的更新。这样可以确保我们处于一致状态,这将允许逻辑撤消。
  3. Undo pass:删除任何失败交易的操作

UNDO数据日志是逻辑的,而REDO数据日志是物理的:

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

Source

关于database - 在 ARIES 恢复方法中重复历史记录有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13756196/

相关文章:

algorithm - SPOJ DQUERY : TLE Even With BIT?

algorithm - 使用格雷码(或其他?)存储任何可变位宽值,而不存储其宽度

Python - Networkx 搜索前驱节点 - 超出最大深度

postgresql - 使用国民身份证作为主键

mysql - 在 RDBMS 中存储 uni/bi/trigrams ngrams 的正确方法?

php - 从数据库检索到下拉列表的数据。用户选择选项然后将该值发送到数据库?

mysql - 在 MySQL 中对纬度和经度数据使用 DECIMAL(17,13) 是否对性能有影响?

python - 根据 Pandas 中的多索引条件/字符删除行

c# - 需要数据库建议->柱状,嵌入式(如果可能)

mysql - 困境: Cascade delete or Join delete