1
数据库原理与应用技术
1.7.1.3 6.1.3 故障类型和恢复方法
6.1.3 故障类型和恢复方法

在数据库的运行过程中,故障是不可避免的。造成数据库故障的原因很多,例如,应用程序、系统软件的错误,设备、通道或CPU等硬件错误,操作人员错误,电源不稳定,计算机病毒,等等。因此,除了尽量避免故障的发生,更应该做好数据库的恢复工作,即DBMS检测出故障,并把数据从错误状态中恢复到某一正确状态,从而使被破坏的、不正确的数据库恢复到最近的正确状态。DBMS的恢复子系统可执行恢复工作。

数据库中可能发生的故障各种各样,主要有以下几种。

1. 事务故障

事务故障(Transaction Failure)包括非预期的事务故障和可预期的事务故障。

可预期的事务故障由应用程序发现,并让事务回退及撤销错误事务故障,恢复数据库到正确状态。

但事务内部更多的故障是非预期的,非预期的事务故障不能由事务程序处理,如输入数据错误、运算溢出、违反存储保护或某些完整性限制、并发事务发生死锁等。

事务故障一般仅指非预期的事务故障。出现了事务故障,意味着事务没有达到预期的终点(COMMIT或显式的ROLLBACK),因此,数据库可能处于不正确状态。恢复程序要在不影响其他事务运行的情况下,强行回滚(ROLLBACK)该事务,即撤销该事务已经做出的任何对数据库的修改,使得该事务好像根本没有启动一样。这类恢复操作称为事务撤销(UNDO)。

2. 系统故障

系统在运行过程中,由于特定类型的硬件错误(如CPU故障)、操作系统或DBMS代码错误、突然停电等,造成系统停止运转,致使所有正在运行的事务都以非正常的方式结束,这类故障称为系统故障(System Failure),此时必须重新启动系统。在这种情况下,由于软件、硬件错误,一些尚未完成的事务的结果可能已送入物理数据库,有些已完成的事务可能有一部分甚至全部留在缓冲区,尚未写回到磁盘上的物理数据库中,从而造成数据库可能处于不正确的状态。为保证数据的一致性,恢复子系统必须在系统重新启动时让所有非正常终止的事务回滚,强行撤销(UNDO)所有未完成事务。重做(REDO)所有已提交的事务,以将数据库真正恢复到一致状态。这类故障影响正在运行的所有事务,引起内存信息丢失但未破坏外存的数据,不破坏数据库,称为故障终止假设(Fail-stop Assumption),又称为软故障(Soft Crash)。

3. 介质故障

介质故障(Medium Failure)又称为硬故障(Hard Crash)或磁盘故障。在系统运行过程中,外存发生故障,如磁盘损坏、磁头碰撞,瞬时强磁场干扰等,使辅助存储器中的数据部分或全部受到破坏,并影响到正在存储这部分数据的事务。这类故障发生的可能性最小,但破坏力最大。