事务内部的故障
事务内部的故障
有的是可以通过事务程序本身发现的(见下面转账事务的例子)
有的是非预期的,不能由事务程序处理的。
例如,银行转账事务,这个事务把一笔金额从一个账户甲转给另一个账户乙。
BEGIN TRANSACTION
读账户甲的余额BALANCE;
BALANCE=BALANCE-AMOUNT; /*AMOUNT 为转账金额*/
IF(BALANCE < 0 ) THEN
{打印‘金额不足,不能转账’;
/*事务内部可能造成事务被回滚的情况*/
ROLLBACK; /*撤销刚才的修改,恢复事务*/
}
ELSE
{读账户乙的余额BALANCE1;
BALANCE1=BALANCE1+AMOUNT;
写回BALANCE1;
COMMIT;}
这个例子所包括的两个更新操作要么全部完成要么全部不做。否则就会使数据库处于不一致状态,例如只把账户甲的余额减少了而没有把账户乙的余额增加。
在这段程序中若产生账户甲余额不足的情况,应用程序可以发现并让事务滚回,撤销已作的修改,恢复数据库到正确状态。
事务内部更多的故障是非预期的,是不能由应用程序处理的。
运算溢出
并发事务发生死锁而被选中撤销该事务
违反了某些完整性限制而被终止等
以后,事务故障仅指这类非预期的故障
事务故障意味着
事务没有达到预期的终点(COMMIT或者显式的ROLLBACK)
数据库可能处于不正确状态。
事务故障的恢复:事务撤消(UNDO)
强行回滚(ROLLBACK)该事务
撤销该事务已经作出的任何对数据库的修改,使得该事务象根本没有启动一样
系统故障
系统故障
称为软故障,是指造成系统停止运转的任何事件,使得
系统要重新启动。
整个系统的正常运行突然被破坏
所有正在运行的事务都非正常终止
不破坏数据库
内存中数据库缓冲区的信息全部丢失
系统故障的常见原因
特定类型的硬件错误(如CPU故障)
操作系统故障
数据库管理系统代码错误
系统断电
系统故障的恢复
发生系统故障时,一些尚未完成的事务的结果可能已送入物理数据库,造成数据库可能处于不正确状态。
恢复策略:系统重新启动时,恢复程序让所有非正常终止的事务回滚,强行撤消(UNDO)所有未完成事务
发生系统故障时,有些已完成的事务可能有一部分甚至全部留在缓冲区,尚未写回到磁盘上的物理数据库中,系统故障使得这些事务对数据库的修改部分或全部丢失
恢复策略:系统重新启动时,恢复程序需要重做(REDO)所有已提交的事务
介质故障
介质故障
称为硬故障,指外存故障
磁盘损坏
磁头碰撞
瞬时强磁场干扰
介质故障破坏数据库或部分数据库,并影响正在存取这部分数据的所有事务
介质故障比前两类故障的可能性小得多,但破坏性大得多
计算机病毒
计算机病毒
一种人为的故障或破坏,是一些恶作剧者研制的一种计算机程序
可以繁殖和传播,造成对计算机系统包括数据库的危害
计算机病毒种类
小的病毒只有20条指令,不到50B
大的病毒像一个操作系统,由上万条指令组成
计算机病毒的危害
有的病毒传播很快,一旦侵入系统就马上摧毁系统
有的病毒有较长的潜伏期,计算机在感染后数天或数月才开始发病
有的病毒感染系统所有的程序和数据
有的只对某些特定的程序和数据感兴趣
计算机病毒已成为计算机系统的主要威胁,自然也是数据库系统的主要威胁
数据库一旦被破坏仍要用恢复技术把数据库加以恢复
故障小结
各类故障,对数据库的影响有两种可能性
一是数据库本身被破坏
二是数据库没有被破坏,但数据可能不正确,这是由于事务的运行被非正常终止造成的。
恢复
恢复操作的基本原理:冗余
利用存储在系统别处的冗余数据来重建数据库中已被破坏或不正确的那部分数据
恢复的实现技术:复杂
一个大型数据库产品,恢复子系统的代码要占全部代码的10%以上
欢迎大家加我微信交流讨论(请备注csdn上添加)