【事务内部故障】
事务故障意味着事务没有达到预期的终点 COMMIT
或 ROLLBACK
,因此,数据库可能处于不正确状态
恢复程序要在不影响其他事务运行的情况下,强行回滚该事务,即撤销该事务已作出的任何对数据库的修改,使得该事务好像没有启动,这类恢复操作被称为事务撤销 UNDO
操作
事务内部故障有些可以通过事务程序本身发现
例如,银行转账事务,该事务将一笔金额从一个账户甲转给另一个账户乙
该例中,若产生账户甲余额不足的情况,应用程序可以发现并让事务回滚,撤销已做的修改,恢复数据库到正常状态
1 | BEGIN TRANSACTION |
而事务内部故障更多的是非预期的,不能由事务程序处理,例如:运算溢出、并发事务出现死锁、违反某些完整性限制而被终止等
【系统故障】
系统故障又被称为软故障,是指造成系统停止运转的任何事件,使得系统要重新启动
例如,特定的硬件错误、操作系统错误、DBMS 代码错误、系统断电等,这类故障影响所有正在运行的事务,但不会破坏数据库
发生系统故障时,一些尚未完成的事务的结果可能已被送入物理数据库,从而可能造成数据库处于不正确状态,为保证数据的一致性,恢复子系统需要清除这些事务对数据库的所有修改,即进行事务撤销 UNDO
操作
另一方面,发生系统故障时,有些已完成的事务可能一部分甚至全部留在缓冲区,尚未写回物理数据库中,此时,在系统重启后,恢复子系统除了进行事务撤销 UNDO
操作外,还需要进行重做 REDO
所有已提交的事务,将数据库恢复到真正一致状态
【介质故障】
介质故障又被称为硬故障,是指外存故障,该类故障发生的概率较小,但破坏力极强,这类故障将破坏部分或全部数据库的数据,并影响正在存取这部分数据的全部事务
对于该类故障,恢复的方法是装入数据库发生介质故障前某个时刻的数据副本,并重做 REDO
自此时始的所有成功事务,将这些事务已提交的结果重新记入数据库
常见的介质故障有:磁盘损坏、磁头碰撞、操作系统的某种潜在错误、瞬时强磁场干扰等
【计算机病毒】
计算机病毒是一种可以繁殖和传播的人为的故障或破坏,是由一些恶作剧者研制的一种计算机程序
计算机病毒不仅会破坏、盗窃系统中的数据,有时还会破坏系统文件,目前已成为计算机系统和数据库系统的主要威胁