、事务内部的故障 今事务内部的故障 ■有的是可以通过事务程序本身发现的(见下面转账事 务的例子) 有的是非预期的 An Introduction to Database System
An Introduction to Database System 一、事务内部的故障 ❖事务内部的故障 ◼ 有的是可以通过事务程序本身发现的(见下面转账事 务的例子) ◼ 有的是非预期的
事务内部的故障(续) 例如,银行转账事务,这个事务把一笔金额从一个账户甲转给另一个账户乙 BEGIN TRANSACTION 读账户甲的余额 BALANCE; BALANCE= BALANCE-AMOUNT;( AMOUNT为转账金额) 写回 BALANCE; IF(BALANCE <0)THEN 打印金额不足,不能转账'; ROLLBACK;(撤销刚才的修改,恢复事务) ELSE 读账户乙的余额 BALANCE1; BALANCE1=BALANCE1+AMOUNT: 写回 BALANCE1; COMMIT An Introduction to Database System
An Introduction to Database System 事务内部的故障(续) ❖ 例如,银行转账事务,这个事务把一笔金额从一个账户甲转给另一个账户乙。 BEGIN TRANSACTION 读账户甲的余额BALANCE; BALANCE=BALANCE-AMOUNT;(AMOUNT 为转账金额) 写回BALANCE; IF(BALANCE < 0 ) THEN { 打印'金额不足,不能转账'; ROLLBACK;(撤销刚才的修改,恢复事务) } ELSE { 读账户乙的余额BALANCE1; BALANCE1=BALANCE1+AMOUNT; 写回BALANCE1; COMMIT; }
事务内部的故障(续) 今这个例子所包括的两个更新操作要么全部完成要么全部不 做。否则就会使数据库处于不一致状态,例如只把账户甲 的余额减少了而没有把账户乙的余额增加 今在这段程序中若产生账户甲余额不足的情况,应用程序可 以发现并让事务滚回,撤销已作的修改,恢复数据库到正 确状态 An Introduction to Database System
An Introduction to Database System 事务内部的故障(续) ❖ 这个例子所包括的两个更新操作要么全部完成要么全部不 做。否则就会使数据库处于不一致状态,例如只把账户甲 的余额减少了而没有把账户乙的余额增加。 ❖ 在这段程序中若产生账户甲余额不足的情况,应用程序可 以发现并让事务滚回,撤销已作的修改,恢复数据库到正 确状态
事务内部的故障(续) 事务内部更多的故障是非预期的,是不能由应用程序处理 的 ■运算溢出 ■并发事务发生死锁而被选中撤销该事务 ■违反了某些完整性限制等 以后,事务故障仅指这类非预期的故障 事务故障的恢复:撤消事务(UNDO) An Introduction to Database System
An Introduction to Database System 事务内部的故障(续) ❖ 事务内部更多的故障是非预期的,是不能由应用程序处理 的。 ◼ 运算溢出 ◼ 并发事务发生死锁而被选中撤销该事务 ◼ 违反了某些完整性限制等 以后,事务故障仅指这类非预期的故障 ❖ 事务故障的恢复:撤消事务(UNDO)
二、系统故障 系统故障 称为软故障,是指造成系统停止运转的仼何事件,使得 系统要重新启动 整个系统的正常运行突然被破坏 所有正在运行的事务都非正常终止 不破坏数据库 内存中数据库缓冲区的信息全部丢失 An Introduction to Database System
An Introduction to Database System 二、系统故障 ❖系统故障 称为软故障,是指造成系统停止运转的任何事件,使得 系统要重新启动。 ▪ 整个系统的正常运行突然被破坏 ▪ 所有正在运行的事务都非正常终止 ▪ 不破坏数据库 ▪ 内存中数据库缓冲区的信息全部丢失