A-A+

针对不同的故障 试给出恢复的策略和方法。(即如何进行事务故障的恢复?系统故障的恢复?介质故障

2022-08-12 16:28:41 问答库 阅读 196 次

问题详情

针对不同的故障,试给出恢复的策略和方法。(即如何进行事务故障的恢复?系统故障的恢复?介质故障恢复?)


请帮忙给出正确答案和分析,谢谢!

参考答案

正确答案:事务故障的恢复:事务故障的恢复是由DBMS自动完成的对用户是透明的。DBMS执行恢复步骤:(1)反向扫描文件日志(即从最后向前扫描日志文件)查找该事务的更新操作;(2)对该事务的更新操作执行逆操作即将日志记录中“更新前的值”写入数据库;(3)继续反向扫描日志文件作同样处理;(4)如此处理下去直至读到此事务的开始标记该事务故障的恢复就完成了。系统故障的恢复:系统故障可能会造成数据库处于不一致状态:一是未完成事务对数据库的更新可能已写入数据库;二是已提交事务对数据库的更新可能还留在缓冲区没来得及写入数据库。因此恢复操作就是要撤销(UNDO)故障发生时未完成的事务重做(REDO)已完成的事务。系统的恢复步骤:(1)正向扫描日志文件找出在故障发生前已经提交的事务队列(REDO队列)和未完成的事务队列(UNDO队列)。(2)对撤销队列中的各个事务进行UNDO处理。进行UND0处理的方法是反向扫描日志文件对每个UNDO事务的更新操作执行逆操作即将日志记录中“更新前的值(Before Image)”写入数据库。(3)对重做队列中的各个事务进行REDO处理。进行REDO处理的方法是正向扫描日志文件对每个REDO事务重新执行日志文件登记的操作。即将日志记录中“更新后的值(After Image)”写入数据库。说明:在第(1)步中如何找出REDO队列和UNDO队列?请大家思考一下。下面给出一个算法:(1)建立两个事务队列:①UNDO-LIST:需要执行UNDO操作的事务集合;②REDO-UST:需要执行REDO操作的事务集合。两个事务队列初始均为空。(2)从日志文件头开始正向扫描日志文件:①如有新开始(遇到Begin Transaction)的事务Ti把Ti暂时放入UNDO一LIST队列;②如有提交的事务(遇到End Transaction)Tj把Tj从UNDO—LIST队列移到REDO—LIST队列;直到日志文件结束。介质故障的恢复:介质故障是最严重的一种故障。恢复方法是重装数据库然后重做已完成的事务。具体过程:(1)DBA装入最新的数据库后备副本(离故障发生时刻最近的转储副本)使数据库恢复到转储时的一致性状态;(2)DBA装入转储结束时刻的日志文件副本;(3)DBA启动系统恢复命令由DBMS完成恢复功能即重做已完成的事务。说明:①假定采用的是静态转储因此第(1)步装入数据库后备副本便可以了。②如果采用的是动态转储第(1)步装入数据库后备副本还不够还需回时装入转储开始时刻的日志文件副本经过处理后才能得到正确的数据库后备副本。③第(2)步重做已完成的事务的算法:a.正向扫描日志文件找出故障发生前已提交的事务的标识将其记入重做队列;b.再一次正向扫描日志文件对重做队列中的所有事务进行重做处理即将日志记录中“更新后的值”写入数据库。
事务故障的恢复:事务故障的恢复是由DBMS自动完成的,对用户是透明的。DBMS执行恢复步骤:(1)反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作;(2)对该事务的更新操作执行逆操作,即将日志记录中“更新前的值”写入数据库;(3)继续反向扫描日志文件,作同样处理;(4)如此处理下去,直至读到此事务的开始标记,该事务故障的恢复就完成了。系统故障的恢复:系统故障可能会造成数据库处于不一致状态:一是未完成事务对数据库的更新可能已写入数据库;二是已提交事务对数据库的更新可能还留在缓冲区,没来得及写入数据库。因此恢复操作就是要撤销(UNDO)故障发生时未完成的事务,重做(REDO)已完成的事务。系统的恢复步骤:(1)正向扫描日志文件,找出在故障发生前已经提交的事务队列(REDO队列)和未完成的事务队列(UNDO队列)。(2)对撤销队列中的各个事务进行UNDO处理。进行UND0处理的方法是,反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作,即将日志记录中“更新前的值(BeforeImage)”写入数据库。(3)对重做队列中的各个事务进行REDO处理。进行REDO处理的方法是,正向扫描日志文件,对每个REDO事务重新执行日志文件登记的操作。即将日志记录中“更新后的值(AfterImage)”写入数据库。说明:在第(1)步中如何找出REDO队列和UNDO队列?请大家思考一下。下面给出一个算法:(1)建立两个事务队列:①UNDO-LIST:需要执行UNDO操作的事务集合;②REDO-UST:需要执行REDO操作的事务集合。两个事务队列初始均为空。(2)从日志文件头开始,正向扫描日志文件:①如有新开始(遇到BeginTransaction)的事务Ti,把Ti暂时放入UNDO一LIST队列;②如有提交的事务(遇到EndTransaction)Tj,把Tj从UNDO—LIST队列移到REDO—LIST队列;直到日志文件结束。介质故障的恢复:介质故障是最严重的一种故障。恢复方法是重装数据库,然后重做已完成的事务。具体过程:(1)DBA装入最新的数据库后备副本(离故障发生时刻最近的转储副本),使数据库恢复到转储时的一致性状态;(2)DBA装入转储结束时刻的日志文件副本;(3)DBA启动系统恢复命令,由DBMS完成恢复功能,即重做已完成的事务。说明:①假定采用的是静态转储,因此第(1)步装入数据库后备副本便可以了。②如果采用的是动态转储,第(1)步装入数据库后备副本还不够,还需回时装入转储开始时刻的日志文件副本,经过处理后才能得到正确的数据库后备副本。③第(2)步重做已完成的事务的算法:a.正向扫描日志文件,找出故障发生前已提交的事务的标识,将其记入重做队列;b.再一次正向扫描日志文件,对重做队列中的所有事务进行重做处理,即将日志记录中“更新后的值”写入数据库。

考点:故障,介质