解题思路:
- 找到检查点(CHECKPOINT)
- 观察检查点之前有START标志的事务。
- 将这些事务分为以下三类
(1)在检查点之前提交(COMMIT)的事务: 这类事务在检查点时已经正
常结束,并不是活动事务,它所做的所有操作已经更新到了数据库,在
恢复时不用做任何操作。
(2)在检查点之后提交的事务: 这类事务在检查点时并没有正常结束,
是活动事务,故障恢复时需要做REDO(重做)。
(3)在检查点之前和之后都没有提交的事务: 这类事务在检查点时并
没有正常结束,是活动事务,故障恢复时需要做UNDO(撤销)。
例题实战
可以参考下面这个表
问题1:请给出系统恢复时需要重做(Redo)的事务列表和需要撤销(Undo)的事务列表。
答案:很明显 T1在故障发生前已经提交了事务,所有不用管,T2在故障发生后提交的需要做重做(Redo)处理,T3在故障发生前没有提交在故障发生后也没有提交,所以做 重做(Undo)处理。 当然答题的时候简单点就像这样写即可:
Redo:T2
Undo:T3
**问题2:假设各数据项的初始值为:I=22,J=45,K=9,系统出错恢复后,I,J,K的数值会恢复为多
少?**
答案:做这个的时候按事务顺序写个草稿
I=3
L=37
J=5
这里发现T1提交了,就说明数据时间改了,那么I=3就是OK了, 我在后面备注一下
I=3 OK
L=37
J=5
M=15
K=11
然后这里是检查点的位置,
这里是T2提交了
然后就故障了
以上就是我们的大概草稿,由此分析可知,I=3是板上钉钉的事情了,接下来就是J、K的值
我们发现T2(L、J)事务是在检查点之后提交的,这里我们就能做出判断,要做Redo操作,
那么J原本的45的值就会改成5,L的值就会改成37(题目没问,我们也分析了), T3(M、K)事务我们发现它在检查点之前或者之后都没有提交事务,那么就做撤销(Undo)操作,原来的值不变。那么K=9。
最终答题:I=3,J=5,k=9
问题3 假设掉电造成磁盘介质损坏,数据库无法启动,请用100字以内的文字简要说明其恢复过程。
常见的有三种故障
- 事务故障
- 系统故障
- 介质故障
这里题目提到磁盘介质损坏,我们就应该想到是介质故障
答:更换存储介质,重装数据库,装载故障前最近一次的数据库备份(数据库镜像)和日志文件副本,撤销(UND0)故障发生时(检查点前)未完成的事务,重做(RED0)(检查点后)已提交的事务。
通用模板
如果是事务故障我们该怎么回答:
如果是系统故障我们该怎么回答: