数据库恢复中的撤消和重做

时间:2014-01-16 07:23:18

标签: transactions database recovery undo-redo

我们何时在数据库恢复中使用撤消和重做操作?例如,考虑考试中提出的以下问题(而不是作业)

考虑银行帐户上两个交易的以下日志序列 初始余额12000,即2000转入抵押付款然后申请 5%的利息。

  1. T1开始
  2. T1 B old = 1200 new = 10000
  3. T1 M old = 0 new = 2000
  4. T1 commit
  5. T2开始
  6. T2 B old = 10000 new = 10500
  7. T2提交
  8. 假设数据库系统在写入日志记录7之前崩溃。什么时候 系统重新启动,所有事务都进行撤消和重做操作?

    我所知道的是,如果系统在提交写入日志之后立即崩溃,并且在将缓冲区刷新到辅助存储之前,我们需要重做这些事务。但是在这里,系统在写入提交的日志条目之前崩溃了。因此,如果我们撤消记录2和3,它就足够了吗?

1 个答案:

答案 0 :(得分:0)

如果数据库在第7点崩溃,则直到第4点(包括)的所有内容都已存在于磁盘上。这是commit提供的保证(假设没有使用像async commit这样的特殊功能)。

在恢复期间,基本上恢复了第4点之后的状态。