故障的种类
1.
事务内部的故障
1.1
可预期
有的是可以通过事务程序本身发现的
支付宝转帐:小明转账一定金额到小李的账户
BEGIN TRANSACTION
读小明账户的余额
BALANCE;
BALANCE=BALANCE-AMOUNT; /*AMOUNT
为转账金额
*/
IF(BALANCE < 0 ) THEN
{
打印‘金额不足,不能转账’;
/*
事务内部可能造成事务被回滚的情况
*/
ROLLBACK; /*
撤销刚才的修改,恢复事务
*/
}
ELSE
{
读小李账户的余额
BALANCE1;
BALANCE1=BALANCE1+AMOUNT;
写回
BALANCE1;
COMMIT;
}
这个例子所包括的两个更新操作要么全部完成要么全部不做。否则就会使数据库处于不一
致状态,例如只把账户甲的余额减少了而没有把账户乙的余额增加。
在这段程序中若产生账户甲余额不足的情况,应用程序可以发现并让事务滚回,撤销已作
的修改,恢复数据库到正确状态。
1.2
不可预期
非预期的,不能由事务程序处理的。
事务内部更多的故障是非预期的,是不能由应用程序处理的。
运算溢出
并发事务发生死锁而被选中撤销该事务
违反了某些完整性限制而被终止等
下文中,事务故障仅指这类非预期的故障
事务故障意味着
事务没有达到预期的终点
(COMMIT
或者显式的
ROLLBACK)
数据库可能处于不正确状态。
事务故障的恢复:事务撤消(
UNDO
)
强行回滚(
ROLLBACK
)该事务
撤销该事务已经作出的任何对数据库的修改,使得该事务象根本没有启动一样
2.
系统故障
称为软故障,是指造成系统停止运转的任何事件,使得系统要重新启动。
评论