📜  门| GATE-CS-2006 |第 85 题

📅  最后修改于: 2021-09-26 04:09:40             🧑  作者: Mango

考虑以下银行账户上两笔交易的日志序列,初始余额为 12000,将 2000 转为抵押付款,然后应用 5% 的利息。

1. T1 start
  2. T1 B old=12000 new=10000
  3. T1 M old=0 new=2000
  4. T1 commit
  5. T2 start
  6. T2 B old=10000 new=10500
  7. T2 commit 

假设数据库系统在日志记录 7 写入之前崩溃。当系统重新启动时,恢复过程中哪一种说法是正确的?
(A)我们必须重做日志记录 6 才能将 B 设置为 10500
(B)我们必须撤消日志记录 6 以将 B 设置为 10000,然后重做日志记录 2 和 3。
(C)我们不需要重做日志记录 2 和 3,因为事务 T1 已经提交。
(D)我们可以以任意顺序应用重做和撤销操作,因为它们是幂等的答案:(乙)
说明:我们必须撤消日志记录 6 以将 B 设置为 10000,然后在提交操作之前重做日志记录 2 和 3 bcoz system fail。所以我们需要撤销活动事务(T2)和重做提交的事务(T1)

注意:这里我们没有使用检查点。

检查点:检查点是一种机制,其中所有以前的日志从系统中删除并永久存储在存储磁盘中。检查点声明了一个点,在该点之前 DBMS 处于一致状态,并且所有事务都已提交。

恢复:
当具有并发事务的系统崩溃并恢复时,它的行为如下 –

=> 恢复系统从末尾向后读取日志到最后一个检查点。

=>它维护两个列表,一个撤销列表和一个重做列表。