第十章-系统故障发生,哪些事务需要重做,哪些事务需要回滚

系统故障发生,哪些事务需要重做,事务需要回滚

  • 什么时候重做——系统故障发生之前,事务A已经提交,事务A需要重做
  • 什么时候回滚——系统故障发生时,事务B已经开始,但未提交,而且没有回滚

下面是例子帮助理解上面两句话
下图是例子,来源于数据库概论(第五版)P305,为了方便观察,我加了辅助线

第十章-系统故障发生,哪些事务需要重做,哪些事务需要回滚_第1张图片

(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事务就行了

(3)A=10,B=0,C=11
(4)A=10,B=0,C=11
(5)A=10,B=0,C=11
(6)A=0,B=0,C=0

你可能感兴趣的:(Mysql数据库笔记)