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

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

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

下面是例子帮助理解上面两句话
下图是例子,来源于数据库概论(第五版)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事务就行了

(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
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海绵泡泡~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值