Administrator
发布于 2026-05-22 / 25 阅读
0
0

数据库系统工程师下午题第五题

第五题汇总

 检查点之后: 已提交的事务需要重做(REDO)

未提交的事务需要撤销(UNDO)

检查点之前:已提交的事务无需处理

2020

阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
如果一个数据库恢复系统采用检查点机制,且其日志文件如表5-1所示,第一列表示日志记录编号,第二列表示日志记录内容。<Ti, START>表示事务Ti开始执行,<Ti, COMMIT>表示事务Ti提交,<Ti, D,VI, V2>表示事务Ti将数据项D的值由V1修改为V2。请回答以下问题。

 

【问题1】(6分)
假设系统开始执行前X=100,Y=50,Z=10,系统出错恢复后,X、Y、Z各自的数值是多少?
【问题2】(4 分)
系统发生事务故障时,故障恢复有撤销事务(undo)和重做事务(redo)两个操作。请给出系统恢复时需要redo的事务列表和需要undo的事务列表。
【问题3】(5 分)
请用100字以内的文字,简要描述系统出错后,基于检查点的恢复过程。

 

答案与解析


试题难度:一般

知识点:数据库运行与管理>日志文件

试题答案:

【问题1】
X=1,Y=50,Z=10。
【问题2】
需要redo的事务列表:T1。
需要undo的事务列表:T2,T3。
【问题3】
步骤1:反向扫描日志文件,确定需要redo的事务和需要undo的事务。
步骤2:对需要undo的事务撤销已经执行的操作。
步骤3:对需要redo的事务重新执行已执行的操作。

 

试题解析:

本题考查考生对数据库中事务故障的掌握。
此类题目要求考生认真阅读日志文件,判断故障发生时完成和未完成的事务对数据项的影响。在此基础上,考生需要了解撤销事务和重做事务在故障恢复中的应用和故障恢复的正确步骤。
【问题1】
系统出错前,只提交了事务T1,即将数据项X的值由100改为1。
T2和T3事务由于未提交,其中的修改未生效。
【问题2】
系统恢复的方法为:
①清除尚未完成的事务对数据库的所有修改,undo(撤销)所有未完成的事务(从后往前)。
②将缓冲区中已完成事务提交的结果写入数据库,redo(重做)所有已提交的事务(从前往后)。
T1已完成事务提交,需要redo。
T2和T3事务尚未完成,需要undo。
【问题3】
本题需要重点关注撤销事务和重做事务的顺序。
在重做事务之前,需要先进行撤销操作。


2021

阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
某数据库系统采用数据转储方式对数据和日志文件进行离线备份,用检查点机制进行恢复。
假设部分其日志文件如表5-1所示。日志记录内容中:

 

【问题1】 (6分)
假设各数据项的初始值为: 1-22, J=45, K-9,系统出错恢复后,I,J,K的数值会恢复为多少?
【问题2】  (4分)
请给出系统恢复时需要重做(Redo)的事务列表和需要撤销(undo)的事务列表。
【问题3】   (5分)
假设掉电造成磁盘介质损坏,数据库无法启动,请用100字以内的文字简要说明其恢复过程。

 


答案与解析

试题难度:一般

知识点:数据库运行与管理>其它

试题答案:

【问题1】
I,J,K的数值会恢复为I=3,J=5,K=9
【问题2】
Redo: T2
Undo:T3
【问题3】
由于掉电造成磁盘介质损坏,数据库已经无法启动,恢复过程的步骤如下所示:
(1)装入最新的数据库后备副本,使数据库恢复到最近一次转储时的一致性状态。
(2)转入相应的日志文件副本,重做已完成的事务。

 

试题解析:

因为在checkpoint这个日志点之前,T1已经完成,T2在检查点之后完成的,T3还没有完成,所以,T2需要重做,T3需要回滚。
由于掉电造成磁盘介质损坏,数据库已经无法启动,恢复过程的步骤如下所示:
(1)装入最新的数据库后备副本,使数据库恢复到最近一次转储时的一致性状态。
(2)转入相应的日志文件副本,重做已完成的事务。


 

2022

【51CTO学院-学员回忆版】试题五(共15分)

阅读下列说明,回答问题1至问题 4,将解答填入答题纸的对应栏内。

【说明】

某数据库系统采用数据转储方式对数据和日志文件进行离线备份,用检查点机制进行恢复。假设其部分日志文件如表5-1所示。日志记录内容中∶CHECKPOINT表示检查点,<Ti,START>表示事务Ti开始执行,<Ti,COMMIT>表示事务Ti提交,<Ti,D,V1,V2>表示事务Ti将数据项D的值由V1改为V2,CRASH表明系统发生断电故障。假设各数据项的初始值为∶I=3,J=6,K=11。


【问题1】(4分)

系统发生故障时,满足持久化要求的事务有哪些?不满足持久化要求的事务有哪些?

【问题2】(6分)

系统恢复后,数据项I、J、K的数值哪些会恢复为初始值?哪些不会恢复为初始值?请给出系统恢复后I、J、K的值。

【问题3】(3分)

如果系统采用先写数据库再记日志的机制,故障发生前已经提交了事务 T2,但没有记录到<T2,COMMIT>。请给出系统恢复后I、J、K的值。

【问题4】(2分)

基于问题2和问题3的结果,请用50字以内的文字简要说明为什么先写日志机制更优。

 


参考答案:

【问题1】

满足持久化要求的事务:T1

不满足持久化要求的事务:T2

【问题2】

K恢复初始值,I、J不恢复为初始值。

最终结果I=4、J=8、K=11

【问题3】

如果系统采用先写数据库再记日志的机制,则日志文件中没有<T2,COMMIT>,即T2表现为未提交,在恢复时,需要撤销所有T2的操作。最终结果I=5、J=7、K=11

【问题4】

为什么要先写日志文件?

写数据库和写日志文件是两个不同的操作,在这两个操作之间可能发生故障。

如果先写了数据库修改,而在日志文件中没有登记下这个修改,则以后就无法恢复这个修改了;如果先写日志,但没有修改数据库,按日志文件恢复时只不过是多执行一次不必要的UNDO操作,并不会影响数据库的正确性。


 

2023

【说明】
某装备的组装过程需要经过多道程序,由于工作空间狭小,同时只能有一人在操作间工作,所以在每道工序之间需要先完成使用配件的出库后,操作人员携带配件到操作间进行安装工作,安装过程中需要扫描配件编码以自动记录该配件的安装情况。
假使存在三个事务用于处理某一类配件的某次安装实施,事务 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 表示系统磁盘出错。

日志记录编号

日志记录内容

LSN1

<T1, START>

LSN2

<T1, I, 20, 8>

LSN3

<T2, START>

LSN4

<T2, J, 0, 1>

LSN5

<T2, J, 1, 5>

LSN6

<T3, START>

LSN7

<T2, J, 5, 6>

LSN8

<T1, COMMIT>

LSN9

CHECKPOINT

LSN10

<T2, COMMIT>

LSN11

<T3, I, 8, (a)>

LSN13

CRASH

LSN14

(b)

LSN15

(c)

 

【问题 1】(5 分)
请用 100 字以内的文字简要说明数据库系统常见故障类型。并说明表 5-1 中的日志记录表明数据库出现哪种类型的故障。

【问题 2】(4 分)
请给出系统恢复时需要重做(Redo)的事务列表和需要撤销(Undo)的事务列表。

【问题 3】(6 分)
根据题干中所描述的业务逻辑,请给出:

填写表 5-1 日志记录中的空白 (a)。

给出 Undo 恢复的补偿日志记录,填写空白 (b) 和 (c)。

 


评论