DBMS执行恢复 *** 作的步骤如下:
①反向扫描日志文件(即从最后向前扫描日志文件),查找该事务的更新 *** 作。
②对该事务的更新 *** 作执行逆 *** 作,即将日志记录中“更新前的值”写入数据库。
③继续反向扫描日志文件,做同样处理。
④如此处理下去,直至读到此事务的开始标记,该事务故障的恢复就完成了。
(2)系统故障恢复。系统故障可能会造成数据库处于不一致性状态:一是未完成事务对数据库的更新可能已写入数据库;二是已提交事务对数据库的更新可能还留在缓冲区,没来得及写入数据库。因此,恢复 *** 作就是要撤销故障发生时未完成的事务,重做已完成的事务。
系统故障的恢复步骤如下:
①正向扫描日志文件,找出在故障发生前已经提交的事务队列(REDO队列)和未完成的事务队列(UNDO队列)。
②对撤销队列中的各个事务进行UNDO处理。进行UNDO处理的方法是,反向扫描日志文件,对每个UNDO事务的更新 *** 作执行逆 *** 作,即将日志记录中“更新前的值”写入数据库。
③对重做队列中的各个事务进行REDO处理。进行REDO处理的方法是,正向扫描日志文件,对每个REDO事务重新执行日志文件登记的 *** 作,即将日志记录中“更新后的值”写入数据库。
(3)介质故障恢复。介质故障是最严重的一种故障。恢复方法是重装数据库,然后重做已完成的事务。具体过程如下:
①DBA装入最新的数据库后备副本(离故障发生时刻最近的转储副本),使数据库恢复到转储时的一致性状态。
②DBA装入转储结束时刻的日志文件副本。
③DBA启动系统恢复命令,由DBMS完成恢复功能,即重做已完成的事务。
事务故障,需要undo恢复发生意外的事务系统故障,需要undo恢复未完成事务,redo恢复已提交但没有同步到数据存储的事务
介质故障:需要装载最近一个数据库完整备份,并依次恢复之后的redolog。
延迟更新技术下系统故障的恢复过程:
1、正向扫描日志文件,建立两个事务列表,一个是已提交事务列表,包含所有具有日志记录
的事务Ti;另一个是未提交事务列表,包括所有具有日志记录,但不具有的事务Tj。
2、对已提交事务列表中的每个事务Ti执行redo *** 作;正向扫描日志文件,对于每个形如
的日志记录,如果Ti在已提交事务列表中,则将Xj=V2写到数据库中。
基于延迟更新技术的事务故障恢复:
事务Ti发生故障时,Ti未到达提交点,因此Ti的更新 *** 作都登记在日志中,并未输出到数据库。
当事务 Ti发生故障时,只需清除日志中事务 Ti的日志记录,而无须对数据库本身做进一步处理。如果故障不是事务Ti本身的逻辑错误,则事务Ti可以在稍后重新启动。
扩展资料:
数据库恢复的三种方式:
数据库可能因为硬件或软件(或两者同时)的故障变得不可用,不同的故障情况需要不同的恢复 *** 作。我们必须决定最适合业务环境的恢复方法。在数据库中恢复有3种类型或方法,即应急(crash)恢复、版本(version)恢复和前滚(rool forward)恢复。
1、应急恢复
应急恢复用于防止数据库处于不一致或不可用状态。数据库执行的事务(也称工作单元)可能被意外中断,若在作为工作单位一部分的所有更改完成和提交之前发生故障,则该数据库就会处于不一致和不可用的状态。这时,需要将该数据库转化为一致和可用的状态。
为此,需要回滚未完成的事务,并完成当发生崩溃时仍在内存中的已提交事务。如在COMMIT语句之前发生了电源故障,则在下一次重新启动并再次访问该数据库时,需要回滚到执行COMMMIT语句前的状态。回滚语句的顺序与最初执行时的顺序相反。
2、版本恢复
版本恢复指的是使用备份 *** 作期间创建的映象来复原数据库的先前版本。这种恢复是通过使用一个以前建立的数据库备份恢复出一个完整的数据库。一个数据库的备份允许你把数据库恢复至和这个数据库在备份时完全一样的状态。而从备份建立后到日志文件中最后记录的所有工作事务单位将全部丢失。
3、前滚恢复
这种恢复技术是版本恢复的一个扩展,使用完整的数据库备份和日志相结合,可以使一个数据库或者被选择的表空间恢复到某个特定时间点。如果从备份时刻起到发生故障时的所有日志文件都可以获得的话,则可以恢复到日志上涵盖到的任意时间点。前滚恢复需要在配置中被明确激活才能生效。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)