FChao
发布于 2026-05-14 / 23 阅读
0
0

数据库系统工程师⑱:案例题5-日志分析

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)转入相应的日志文件副本,撤销未完成的事务,重做已完成的事务。


评论