文档介绍:数据库恢复技术
故障的类型
计算机病毒
计算机病毒是具有破坏性、可以自我复制的计算机程序。计算机病毒已成为计算机系统的主要威胁,自然也是数据库系统的主要威胁。因此数据库一旦被破坏仍要用恢复技术把数据库加以恢复。值)
AI(After Image) 更新后数据的新值(对删除操作而言, 此项为空值)
恢复的实现技术
日志文件的作用
日志文件在数据库恢复中起着非常重要的作用。可以用来进行事务故障恢复和系统故障恢复,并协助后备副本进行介质故障恢复。
具体地讲:事务故障恢复和系统故障必须用日志文件。
在动态备份方式中必须建立日志文件,后援副本和日志文件综合起来才能有效地恢复数据库。
恢复的实现技术
在静态备份方式中,也可以建立日志文件。
当数据库毁坏后可重新装入后援副本把数据库恢复到备份结束时刻的正确状态,然后利用日志文件,把已完成的事务进行重做处理,对故障发生时尚未完成的事务进行撤消处理。
这样不必重新运行那些已完成的事务程序就可把数据库恢复到故障前某一时刻的正确状态,如下图所示。
恢复的实现技术
登记日志文件(logging)
为保证数据库是可恢复的,登记日志文件时必须遵循两条原则:
1. 登记的次序严格按并发事务执行的时间次序。
2. 必须先写日志文件,后写数据库。
把对数据的修改写到数据库中和把写表示这个修改的日志记录写到日志文件中是两个不同的操作。有可能在这两个操作之间发生故障,即这两个写操作只完成了一个。如果先写了数据库修改,而在运行记录中没有登记下这个修改,则以后就无法恢复这个修改了。
如果先写日志,但没有修改数据库,按日志文件恢复时只不过是多执行一次不必要的UNDO操作,并不会影响数据库的正确性。所以为了安全,一定要先写日志文件,即首先把日志记录写到日志文件中,然后写数据库的修改。
这就是所谓的“提前写日志”原则。
恢复的策略
事务故障的恢复
事务故障是指事务在运行至正常终止点前被中止,这时恢复子系统应利用日志文件撤消(UNDO)此事务已对数据库进行的修改。
事务故障的恢复是由系统自动完成的,对用户是透明的。系统的恢复步骤是:
反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。
对该事务的更新操作执行逆操作。即将日志记录中“更新前的值”写入数据库。这样,如果记录中是插入操作,则相当于做删除操作(因此时“更新前的值”为空)。若记录中是删除操作,则做插入操作,若是修改操作,则相当于用修改前值代替修改后值。
继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。
如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了。
恢复的策略
系统故障的恢复
前面已讲过,系统故障造成数据库不一致状态的原因有两个,一是未完成事务对数据库的更新可能已写入数据库,二是已提交事务对数据库的更新可能还留在缓冲区没来得及写入数据库。因此恢复操作就是要撤消故障发生时未完成的事务,重做已完成的事务。
系统故障的恢复是由系统在重新启动时自动完成的,不需要用户干预。
系统的恢复步骤是:
正向扫描日志文件(即从头扫描日志文件),找出在故障发生前已经提交事务(这些事务既有BEGIN TRANSACTION记录,也有COMMIT记录),将其事务标识记入重做(REDO)队列。
同时找出故障发生时尚未完成的事务(这些事务只有BEGIN TRANSACTION记录,无相应的COMMIT记录),将其事务标识记入撤消(UNDO)队列。
对撤消队列中的各个事务进行撤消(UNDO)处理。
恢复的策略
注:进行UNDO处理的方法是,反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作,即将日志记录中“更新前的值”写入数据库。
对重做队列中的各个事务进行重做(REDO)处理。
注:进行REDO处理的方法是:正向扫描日志文件,对每个REDO事务重新执行日志文件登记的操作。即将日志记录中“更新后的值”写入数据库。
恢复的策略
介质故障的恢复
发生介质故障后,磁盘上的物理数据和日志文件被破坏,这是最严重的一种故障,恢复方法是重装数据库,然后重做已完成的事务。
具体步骤是:
1) 装入最新的数据库后备副本(离故障发生时刻最近的备份副本),使数据库恢复到最近一次备份时的一致性状态。
对于联机备份的数据库副本,还须同时装入备份开始时刻的日志文件副本,利用恢复系统故障的方法(即REDO+UNDO),才能将数据库恢复到一致性状态。
恢复的策略
2) 装入相应的日志文件副本(备份结束时刻的日志文件副本),重做已完成