数据库系统中可能发生的各种各样的故障,大致可以分为以下几类:
1.事务故障
事务故障是指事务在执行过程中发生的故障,此类故障只发生在单个或多个事务上,系统能正常运行,其它事务不受影响.事务故障有些是预期的,通过事务程序本身可以发现并处理,如果发生故障,使用ROLLBACK回滚事务,使事务回到前一种正确状态.有些是非预期的,不能由事务程序处理的,如运算溢出,违反了完整性约束,并发事务发生死锁后被系统选中强制撤消等,使事务未能正常完成就终止.这时事务处于一种不一致状态.后面讨论的事务故障仅指这类非预期的故障.
发生事务故障时,事务对数据库的操作没有到达预期的终点(要么全部做COMMIT,要么全部不做ROLLBACK),破坏了事务的原子性和一致性,这时可能已经修改了部分数据,因此数据库管理系统必须提供某种恢复机制,强行回滚该事务对数据库的所有修改,使系统回到该事务发生前的状态,这种恢复操作称为撤消(UNDO).所谓撤销,就是反向进行逆操作.
2.系统故障
系统故障主要是由于服务器在运行过程中,突然发生硬件错误(如CPU故障),操作系统故障,DBMS错误,停电等原因造成的非正常中断,至使整个系统停止运行,所有事务全部突然中断,内存缓冲区中的数据全部丢失,但硬盘,磁带等外设上的数据未受损失.
系统故障的恢复要分别对待,其中有些事务尚未提交完成,其恢复方法是撤消(UNDO),与事务故障处理相同;有些事务已经完成,但其数据部分或全部还保留在内存缓冲区中,由于缓冲区数据的全部丢失,至使事务对数据库修改的部分或全部丢失,同样会使数据库处于不一致状态,这时应将这些事务已提交的结果重新写入数据库,这时需要重做(REDO)提交的事务,所谓重做,就是先使数据库恢复到事务前的状态,然后顺序重做每一个事务,使数据库恢复到一致状态.
3.介质故障
介质故障是指外存故障.介质故障使数据库的数据全部或部分丢失,并影响正在存取出错介质上数据的事务.介质故障可能性小,但破坏性最大.一般将系统故障称为软故障(Soft Crash),介质故障称为硬故障(Hard Crash).对于介质故障,通常是将数据从建立的备份上先还原数据,然后使用日志进行恢复.

