2025年真题
【说明】
利用日志技术进行数据库恢复时,恢复子系统必须搜索整个日志,这将耗费大量的时间。检查点技术可以解决此问题。下表给出T1和T2相关的部分操作列表。初始状态下,A=5,B=10,C=10,D=20
下图给出了一个基于检查点的日志记录的例子。其中横坐标表示时间轴,每个事务后边的线段表示其从开始到提交的时间区间,虚线部分表示还未发生。请回答以下问题。


1. (4分)假段T2和T4两个事务没有对A,B,C,D四个数据项进行读写操作,故障恢复后,四个数据项的值分别是多少?
T1在检查点之前提交,故修改有效A=10,C=20
B和D的修改被撤销,回到初值,B=10,D=20
2. 请补全以下日志记录片段:
(T1 START)
(T1,A,(a),10) #a的初值是5,填5
(T3,START)
(T3,B,(b),(c) )#b的初值是10,被修改为30
(T1,C,10,20)
(T3,D,20,(d)) #d的值被修改为40
......
(T1 COMMIT)
(CHECKPOINT S2)
(T2 COMMIT)
3. (7分)图中所示各事务,在系统故障发生后,
(1)哪些事务没必要再REDO?
T1已经在检查点之前提交,无需REDO
(2)哪些事务需要UNDO?
T3/T4未提交,所做修改需要UNDO
1.
【说明】
某数据库系统采用数据转储方式对数据和日志文件进行离线备份,用检查点机制进行恢复。假设其部分日志文件如表5-1所示。日志记录内容中:CRASH表明系统发生断电故障。假设各数据项的初始值为:I=3,J=6,K=11。

持久化判断
【问题1】(4分)
系统发生故障时,满足持久化要求的事务有哪些?不满足持久化要求的事务有哪些?
在系统发生故障时,T1和T2已经进行提交。T3和T4未提交。
T1 在 LSN6 提交,在检查点之前,检查点会把"已提交事务的修改全部写入磁盘"
所以实际上,T1 检查点时已经落盘了,恢复时不需要再 REDO,也不需要持久化"补救"。
因此,在故障发生时,满足持久化要求的事务:T2
不满足持久化要求的事务:T3,T4
checkpoint恢复分析
【问题2】(6分)
系统恢复后,数据项I、J、K的数值哪些会恢复为初始值?哪些不会恢复为初始值?请给出系统恢复后I、J、K的值。
从故障中恢复时,是从checkpoint向下扫描的。
已提交的事物REDO重新执行,未提交的事物撤销UNDO。
提交的T1T2只操作了I和J,而K从未被提交
K恢复为初始值,l、J不恢复为初始值。
K因为从未提交过,直接恢复到初始值11
I的值为最后一次修改的:4
J的值为最后一次修改的:8
写数据库和写日志比较
【问题3】(3分)
如果系统采用先写数据库再记日志的机制,故障发生前已经提交了事务T2,但没有记录到<T2,COMMIT>。请给出系统恢复后I、J、K的值。
题目意思就是T2未提交,也就是只有T1的操作是有效的。
T1更改J为7,I为5,K回退为初值11
I=5、J=7、K=11
【问题4】(2分)
基于问题2和问题3的结果,请用50字以内的文字简要说明为什么先写日志机制更优。
写数据库和写日志文件是两个不同的操作,在这两个操作之间可能发生故障。
如果先写了数据库修改,而在日志文件中没有登记下这个修改,则故障以后就无法恢复这个修改了;如果先写日志,但没有修改数据库,按日志文件恢复时只不过是多执行一次不必要的UNDO操作,并不会影响数据库的正确性。
2.
【说明】
某装备的组装过程需要经过多道程序,由于工作空间狭小,同时只能有一人在操作间工作,所以在每道工序之间需要先完成使用配件的出库后,操作人员携带配件到操作间进行安装工作,安装过程中需要扫描配件编码以自动记录该配件的安装情况。
假使存在三个事务用于处理某一类配件的某次安装实施,事务T1负责出库登记,T2负责安装登记,T3负责将未使用的配件重新入库。所有三个事务执行完成后,T1出库的数量应等于T2安装的数量与T3重新入库的数量之和。数据项I记录配件的库存数量,数据项J记录成功安装的数量。
某次组装过程出库了12个配件,安装了6个。假设数据库系统采用检查点机制对故障进行恢复,部分日志文件如表5-1所示。日志记录内容中:<Ti,START>表示事务Ti开始执行,<Ti,COMMIT>表示事务Ti提交,<Ti,D,V1,V2>表示事务Ti将数据项D的值由V1修改为V2。例如:<T1,I,22,3>表示事务T1将数据项I的数值从22修改为3。<Ti,D,V>表示将事务Ti回滚,数据项D的值回滚到V。<Ti, abort>表示事务Ti回滚结束。CRASH表示系统磁盘出错。请回答以下问题。

【问题1】(5分)
请用100字以内的文字简要说明数据库系统常见故障类型。并说明表5-1中的日志记录表明数据库出现哪种类型的故障。
常见故障类型是事务故障、系统故障和介质故障。
事务故障是由于事务程序内部错误而引起的。
系统故障是特定类型的硬件错误、操作系统故障等。
介质故障是指外存故障
(磁盘等存储介质故障)
表5-1中 CRASH 定义为“系统磁盘出错”,属于介质故障。
checkpoint恢复分析
【问题2】(4分)
请给出系统恢复时需要重做(Redo)的事务列表和需要辙销(Undo)的事务列表。
从故障中恢复时,是从checkpoint向下扫描的。
已提交的事物REDO重新执行,未提交的事物撤销UNDO。
REDO:T2
UNDO:T3
补充日志记录
【问题3】(6分)
根据题干中所描述的业务逻辑,请填写表5-1日志记录中的空白(a);请给出Undo恢复的补偿日志记录,填写空白(b)和(c)。
重新阅读题目条件:
事务T1负责出库登记,T2负责安装登记,T3负责将未使用的配件重新入库
数据项I记录配件的库存数量,数据项J记录成功安装的数量。
配件出库安装之后,剩余的配件应该重新入库:所有三个事务执行完成后,T1出库的数量应等于T2安装的数量与T3重新入库的数量之和。

空白(a):
根据业务逻辑:
T1 出库:I 从 20 减为 8,即出库 12 个。
T2 安装:J 最终为 6,即安装 6 个。
未使用配件数 = 12 − 6 = 6,应重新入库,故 T3 将 I 从 8 增加为 14。
所以 (a)= 14。
空白(b)和(c):
系统恢复时需撤销未提交事务 T3,生成补偿日志:
由于T3没有提交,T3需要先将数据项 I 回滚到修改前的值 8,记录
<T3, I, 8>。然后记录回滚结束标志 ,题目:<Ti, abort>表示事务Ti回滚结束。
<T3, abort>。
因此:
(b)= <T3, I, 8>
(c)= <T3, abort>
3.
【说明】
如果一个数据库恢复系统采用检查点机制,且其日志文件如表5-1所示,第一列表示日志记录编号,第二列表示日志记录内容。<Ti, START>表示事务Ti开始执行,<Ti, COMMIT>表示事务Ti提交,<Ti, D,V1, V2>表示事务Ti将数据项D的值由V1修改为V2。请回答以下问题。
表5-1 日志记录列表

【问题1】(6分)
假设系统开始执行前X=100,Y=50,Z=10,系统出错恢复后,X、Y、Z各自的数值是多少?
只有T1提交了,系统故障后,未提交的事物要回滚。换句话说就是T1的才生效,剩下的全变回初值。
T1:X=1
Y=50,Z=10
【问题2】(4 分)
系统发生事务故障时,故障恢复有撤销事务(undo)和重做事务(redo)两个操作。请给出系统恢复时需要redo的事务列表和需要undo的事务列表。
需要redo的事务列表:T1
需要undo的事务列表:T2,T3
检查点恢复过程
【问题3】(5 分)
请用100字以内的文字,简要描述系统出错后,基于检查点的恢复过程。
先undo再redo
步骤1:从故障点反向扫描日志文件至最近检查点,确定检查点之后需要redo的事务和需要undo的事务。
步骤2:对需要undo的事务撤销已经执行的操作。反向/回滚恢复(从日志末尾向检查点)。
步骤3:对需要redo的事务重新执行已执行的操作。正向/前滚恢复(从检查点向日志末尾)
4.
【说明】
某数据库系统采用数据转储方式对数据和日志文件进行离线备份,用检查点机制进行恢复。
假设部分日志文件如表5-1所示。日志记录内容中:<Ti, START>表示事务Ti开始执行,<Ti, COMMIT>表示事务Ti提交,<Ti, D, V1, V2>表示事务Ti将数据项D的值由V1修改为V2。例如:<T1, I, 22, 3>表示事务T1将数据项I的值从22修改为3。CRASH表明系统发生掉电故障。请回答以下问题。

【问题1】 (6分)
假设各数据项的初始值为: I=22, J=45, K=9,系统出错恢复后,I、J、K的数值会恢复为多少?
首先只有T1 T2提交了,只看T1T2
T1: I=3
T2: L=37
T2: J=5
K由于被回滚,为初值9
【问题2】 (4分)
请给出系统恢复时需要重做(Redo)的事务列表和需要撤销(undo)的事务列表。
注意看这道题还有T7
Redo: T2
Undo:T3、T7
存储介质故障恢复过程
【问题3】 (5分)
假设掉电造成磁盘介质损坏,数据库无法启动,请用100字以内的文字简要说明其恢复过程。
由于掉电造成磁盘介质损坏,数据库已经无法启动,恢复过程的步骤如下所示:
注意题目提示:某数据库系统采用数据转储方式对数据和日志文件进行离线备份
(1)装入最新的数据库后备副本,使数据库恢复到最近一次转储时的一致性状态。
(2)转入相应的日志文件副本,撤销未完成的事务,重做已完成的事务。