考虑以下银行账户上两笔交易的日志序列,初始余额为 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 处于一致状态,并且所有事务都已提交。
恢复:
当具有并发事务的系统崩溃并恢复时,它的行为如下 –
=> 恢复系统从末尾向后读取日志到最后一个检查点。
=>它维护两个列表,一个撤销列表和一个重做列表。