1.持久化判断
【说明】
某数据库系统采用数据转储方式对数据和日志文件进行离线备份,用检查点机制进行恢复。假设其部分日志文件如表5-1所示。日志记录内容中:CRASH表明系统发生断电故障。假设各数据项的初始值为:I=3,J=6,K=11。

【问题1】(4分)
系统发生故障时,满足持久化要求的事务有哪些?不满足持久化要求的事务有哪些?
在系统发生故障时,T1和T2已经进行提交。T3和T4未提交。
T1 在 LSN6 提交,在检查点之前,检查点会把"已提交事务的修改全部写入磁盘"
所以实际上,T1 检查点时已经落盘了,恢复时不需要再 REDO,也不需要持久化"补救"。
因此,在故障发生时,满足持久化要求的事务:T2
不满足持久化要求的事务:T3,T4
【问题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操作,并不会影响数据库的正确性。