系统故障发生,哪些事务需要重做,事务需要回滚
下面是例子帮助理解上面两句话
下图是例子,来源于数据库概论(第五版)P305,为了方便观察,我加了辅助线
(1)如果系统故障发生在14之后,说明哪些事务需要重做?哪些事务需要回滚?
(2)如果系统故障发生在10之后,说明哪些事务需要重做?哪些事务需要回滚?
(3)如果系统故障发生在9之后,说明哪些事务需要重做?哪些事务需要回滚?
(4)如果系统故障发生在7之后,说明哪些事务需要重做?哪些事务需要回滚?
解答
(1)T1,T3重做,T4回滚
理解思路:
先看发生在14之前的事务,T1,T3已经提交了而所以需要重做,
T2已经在故障前回滚了,不做处理,
至于T4还未提交,不像T2一样故障前回滚,所以T4也需要回滚。
(2)T1重做,T2、T3回滚
T4故障前未开始,不做处理
(3)T1重做,T2,T3回滚
(4)T1重做,T2回滚
5.上题日志记录,假设A、B、C的值都是0
(1)如果系统故障发生在14之后,写出系统恢复后的A、B、C的值;
(2)如果系统故障发生在12之后,写出系统恢复后的A、B、C的值;
(3)如果系统故障发生在10之后,写出系统恢复后的A、B、C的值;
(4)如果系统故障发生在9之后,写出系统恢复后的A、B、C的值;
(5)如果系统故障发生在7之后,写出系统恢复后的A、B、C的值;
(6)如果系统故障发生在5之后,写出系统恢复后的A、B、C的值;
思路:查看当前故障出哪些事务发生了重做,回滚的事务写入无效。
(1)A=8,B=7,C=11
故障发生在14处,T1、T3重做,写入有效
(2)A=10,B=0,C=11
故障在12之后,所以只有T1事务重做了,只看T1事务就行了