考虑以下两个在银行帐户上的交易的对数顺序,初始余额为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)我们可以按任意顺序应用重做和撤消操作,因为它们是幂等的答案: (B)
说明:我们必须撤消日志记录6才能将B设置为10000,然后重做日志记录2和3 bcoz系统在提交操作之前失败。因此,我们需要撤销活动事务(T2)和重做已提交事务(T1)
注意:这里我们不使用检查点。
Checkpoint: Checkpoint是一种将以前的所有日志从系统中删除并永久存储在存储磁盘中的机制。 Checkpoint声明一个点,在此点之前DBMS处于一致状态,并且所有事务都已提交。
恢复:
当具有并发事务的系统崩溃并恢复时,它的行为如下:
=>恢复系统从末尾到最后一个检查点向后读取日志。
=>它维护两个列表,一个撤消列表和一个重做列表。
=>如果恢复系统看到带有以下内容的日志
=>如果恢复系统看到带有以下内容的日志
然后撤消撤消列表中的所有事务,并删除其日志。重做列表中的所有事务及其先前的日志将被删除,然后在保存其日志之前重做。
所以答案是B重做日志记录2和3和撤消日志记录6
这个问题的测验