1.事务内部的故障
(1)有的是可以通过事务程序本身发现的(见下面转账事务的例子);有的是非预期的,不能由事务程序处理的。例如,银行转账事务,这个事务把一笔金额从一个账户甲转给另一个账户乙:
BEGIN TRANSACTION
读账户甲的余额BALANCE;
BALANCE=BALANCE-AMOUNT; /*AMOUNT
为转账金额*/
IF(BALANCE
< 0 ) THEN
{打印‘金额不足,不能转账’;
/*事务内部可能造成事务被回滚的情况*/
ROLLBACK; /*撤销刚才的修改,恢复事务*/
}
ELSE
{读账户乙的余额BALANCE1;
BALANCE1=BALANCE1+AMOUNT;
写回BALANCE1;
COMMIT;}
(2)事务内部更多的故障是非预期的,是不能由应用程序处理的。运算溢出,并发事务发生死锁而被选中撤销该事务,违反了某些完整性限制而被终止以后,事务故障仅指这类非预期的故障。
(3)事务故障意味着,事务没有达到预期的终点(COMMIT或者显式的ROLLBACK)n数据库可能处于不正确状态。
(4)事务故障的恢复:事务撤消(UNDO),强行回滚(ROLLBACK)该事务,撤销该事务已经作出的任何对数据库的修改,使得该事务象根本没有启动一样。
2.系统故障
称为软故障,是指造成系统停止运转的任何事件,使得系统要重新启动。整个系统的正常运行突然被破坏,所有正在运行的事务都非正常终止,不破坏数据库,内存中数据库缓冲区的信息全部丢失。
3.介质故障
称为硬故障,指外存故障:磁盘损坏,磁头碰撞,瞬时强磁场干扰,介质故障破坏数据库或部分数据库,并影响正在存取这部分数据的所有事务介质故障比前两类故障的可能性小得多,但破坏性大得多。
4.计算机病毒
(1)基本概念:一种人为的故障或破坏,是一些恶作剧者研制的一种计算机程序;可以繁殖和传播,造成对计算机系统包括数据库的危害。
小的病毒只有20条指令,不到50B;大的病毒像一个操作系统,由上万条指令组成。
(2)计算机病毒的危害:有的病毒传播很快,一旦侵入系统就马上摧毁系统;有的病毒有较长的潜伏期,计算机在感染后数天或数月才开始发病;有的病毒感染系统所有的程序和数据;有的只对某些特定的程序和数据感兴趣。
计算机病毒已成为计算机系统的主要威胁,自然也是数据库系统的主要威胁,数据库一旦被破坏仍要用恢复技术把数据库加以恢复。