§22数据结构与数据库原理数据库原理10章节

上传人:w****i 文档编号:92250382 上传时间:2019-07-08 格式:PPT 页数:47 大小:224KB
返回 下载 相关 举报
§22数据结构与数据库原理数据库原理10章节_第1页
第1页 / 共47页
§22数据结构与数据库原理数据库原理10章节_第2页
第2页 / 共47页
§22数据结构与数据库原理数据库原理10章节_第3页
第3页 / 共47页
§22数据结构与数据库原理数据库原理10章节_第4页
第4页 / 共47页
§22数据结构与数据库原理数据库原理10章节_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《§22数据结构与数据库原理数据库原理10章节》由会员分享,可在线阅读,更多相关《§22数据结构与数据库原理数据库原理10章节(47页珍藏版)》请在金锄头文库上搜索。

1、第十章 数据库恢复技术,事务 故障种类 恢复技术 恢复策略,第一节 事务的概念,1.示例银行两账户A、B间划账5万元 操作序列:读A 判断A是否透支 若是,结束退出 若否,计算A=A-50,000 写A 读B 计算B=B+50,000 写B,问题,如果程序运行在第步之后、第步之前死机、停电,导致错误结果数据不一致。 正确的结果: 要么完成全部操作序列划账完成 要么什么都没有做未划账,2.事务的概念,事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,它们是一个不可分割的工作单位。 事务:操作序列 程序:包含多个事务。,3.定义事务,在SQL语言中,定义事务的语句有: 事务开始:

2、BEGIN TRANSACTION 事务结束(提交): COMMIT 事务结束(回滚): ROLLBACK,定义事务,提交:将事务中所有对数据库的更新写回到磁盘上的物理数据库中,事务正常结束。 回滚:在事务运行过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤销,回滚到事务开结时的状态。,4.事务的特性(ACID),原子性(Atomicity):事务是数据库的逻辑工作单元,事务中包括的诸操作要么都做,要么都不做,不可分割。 一致性(Consistency):事务的执行结果必须使数据库从一个一致性状态转变到另一个一致性状态。 隔离性(Isolation):一个事

3、务的执行不能被其他事务干扰。 持续性(Durability):一个事务一旦提交,它对数据库中数据的改变就应该是永久的,接下来的其他操作或故障不应该对其执行结果有任何影响。,事务的特性,事务的ACID特性可能遭到破坏的因素有: 事务在运行过程中被强行停止; 多个事务并行运行时,不同事务的操作交叉执行。 所以事务是恢复和并发控制的基本单位。,第二节 故障的种类,事务内部故障 系统故障 介质故障 计算机病毒,1.事务内部故障,余额不足 运算溢出 并发事务发生死锁 违反完整性约束 有些可以预见的,有些是非预期的。,2.系统故障软故障,造成系统停止运行的任何事件,系统必须重新启动。 特定类型的硬件错误

4、CPU故障 操作系统故障 DBMS代码错误 停电 ,3.介质故障硬故障,系统外存故障,破坏性最大。 磁盘损坏 磁头碰撞 瞬间强磁场干扰 ,4.计算机病毒,是一种人为的故障或破坏。 破坏数据 破坏系统,故障对数据库的影响,数据库本身的破坏,数据不可访问; 数据库可以访问,但数据不正确。,第三节 数据库恢复技术,把数据库从错误状态恢复到某一已知的正确状态的功能叫数据库恢复。 恢复的基本原理:数据冗余。,1.恢复技术机制,数据库恢复机制涉及的关键问题: 如何建立冗余数据 数据转储 登记日志文件 如何利用这些冗余数据实施数据库恢复,2.数据转储,数据转储:由DBA定期地将整个数据库复制到磁带或另一个磁

5、盘上的过程。,数据转储状态,静态转储:在系统中无运行事务时进行的转储操作。 得到的一定是一个数据一致性的副本。 动态转储:转储期间允许对数据库进行存取或修改。 得到的数据副本不能保证正确有效。 需利用日志文件恢复。,数据转储方式,海量转储:每次转储全部数据库。 增量转储:每次只转储上一次转储后更新过的数据。 动态海量转储、动态增量转储 静态海量转储、静态增量转储,数据转储策略,转储状态、转储方式的选择; 转储周期:定期转储数据库的时间间隔。 每天、每周、每月、 备份数据保存地点 本地、异地。,3.日志文件,日志文件:记录事务对数据库更新操作的文件。 日志文件的内容: * 事务的开始标记 * 事

6、务的结束标记 * 事务的所有更新操作,日志文件内容,以记录为单位的日志文件:每个事务的开始标记、事务的结束标记、更新操作均作为日志文件中的一个记录。 每个日志记录包括: * 事务标识 * 操作类型 * 操作对象 * 更新前的值 * 更新后的值,日志文件内容,以数据块为单位的日志文件: * 事务标识 * 更新前的数据块 * 更新后的数据块,4.登记日志文件,登记日志文件: * 登记次序严格按并发事务执行的时间进行 * 必须先写日志文件,后写数据库,5.日志文件作用,事务故障恢复(必须) 系统故障恢复(必须) 动态转储(必须) 静态转储(非必须),第四节 恢复策略,1.事务故障的恢复,反向扫描日志

7、文件,查找事务的更新操作; 对该事务的更新操作执行逆操作(撤消); 继续反向扫描日志文件,查找该事务的其他更新操作,做同样处理; 直至读到此事务的开始标志。 事务故障的恢复是系统自动完成的。,2.系统故障的恢复,正向扫描日志文件: 找出在故障发生前已提交的事务,将其记入重做队列(REDO); 找出在故障发生时尚未完成的事务,将其记入撤销队列(UNDO) ; 对撤销队列的各事务进行撤销处理; 对重做队列的各事务进行重做处理。 系统故障的恢复是系统在重新启动时自动完成的。,3.介质故障的恢复,装入最新的数据库后备副本; 若为动态转储副本,还需同时装入转储开始时的日志文件副本,利用“系统故障恢复技术

8、”将数据库恢复到一致性状态; 装入相应的日志文件副本,重做已完成的事务:即扫描日志文件,找出在故障发生时已提交的事务标识,将其记入重做队列;然后对重做队列中的事务进行重做处理。,第五节 数据库镜像,数据库镜像(Mirror):根据DBA要求,自动把整个数据库或其中的关键数据复制到另一个磁盘上。 每当数据库更新时,DBMS自动把更新的数据复制到镜像磁盘上; 故障时,镜像磁盘继续提供使用,同时DBMS自动利用镜像数据进行恢复; 数据库镜像还可以用于并发操作。,数据库镜像,第六节 SQL Server中的事务处理,1.定义事务 BEGIN TRANSACTION WITH MARK 事务名:小于等于

9、32个字节,仅在嵌套的BEGIN.COMMIT 或BEGIN.ROLLBACK语句的最外语句对上使用事务名。 事务名称变量:用户定义的、含有有效事务名称的变量的名称。必须用 char、varchar、nchar 或 nvarchar 数据类型声明该变量。 WITH MARK :指定在日志中标记事务。如果使用了 WITH MARK,则必须指定事务名。WITH MARK 允许将事务日志还原到命名标记。,2.提交事务,COMMIT TRANSACTION 标志一个成功的事务的结束,只有当事务所引用的所有数据的逻辑都正确时,才应发出 COMMIT TRANSACTION 命令。,3.事务回滚,ROLL

10、BACK TRANSACTION | | 撤销自事务的起点或到某个保存点所做的所有数据修改。 在执行 COMMIT TRANSACTION 语句后不能回滚事务。,示例1:使用事务确保数据的一致性,相关联的两个更新操作未定义在一个事务中,可能导致数据的不一致性。 UPDATE Employee SET cCurrentPosition = 0001 WHERE cEmployeeCode = 000002 UPDATE Position SET iCurrentStrength = iCurrentStrength + 1 WHERE cPositionCode = 0001,定义在一个事务中,

11、USE Examples GO BEGIN TRANSACTION trnUpdatePosition UPDATE Employee SET cCurrentPosition = 0001 WHERE cEmployeeCode = 000002 UPDATE Position SET iCurrentStrength = iCurrentStrength + 1 WHERE cPositionCode = 0001 COMMIT TRANSACTION trnUpdatePosition,示例2:将商业类图书版税增加20%。增加后,如果商业类图书版税超过25元,事务将回滚。,BEGIN T

12、RANSACTION USE pubs UPDATE Titles SET Royalty=Royalty + 20 WHERE type LIKE busin% IF (SELECT MAX(Royalty) FROM Titles WHERE type LIKE busin%) $25 BEGIN PRINT Transaction rollback back ROLLBACK TRANSACTION END ELSE BEGIN PRINT Transaction commited COMMIT TRANSACTION END,示例3:标记事务,BEGIN TRANSACTION Roy

13、altyUpdate WITH MARK Update royalty values GO USE pubs GO UPDATE roysched SET royalty = royalty * 1.10 WHERE title_id LIKE Pc% GO COMMIT TRANSACTION RoyaltyUpdate GO,4.在事务内设置保存点,用户可以在事务内设置保存点或标记。保存点用来定义/标记如果有条件地取消事务的一部分操作,事务可以返回的位置。 如果将事务回滚到保存点,则必须继续完成事务,或者必须(通过将事务回滚到其起始点)完全取消事务。 若要取消整个事务,请使用 ROLLBA

14、CK TRANSACTION 格式。这将撤消事务的所有语句和过程。 当事务开始时,将一直控制事务中所使用的资源直到事务完成(也就是锁定)。当将事务的一部分回滚到保存点时,将继续控制资源直到事务完成(或者回滚全部事务)。,在事务内设置保存点,SAVE TRANSACTION | 保存点名:是指派给保存点的名称,小于等于32个字节。 保存点名称变量:用户定义的、含有有效保存点名称的变量的名称。必须用 char、varchar、nchar 或 nvarchar 数据类型声明该变量。,示例:更改The Gourmet Microwave作者的版税。提交前,测试结果。,BEGIN TRANSACTION

15、 royaltychange UPDATE titleauthor SET royaltyper = 65 FROM titleauthor, titles WHERE royaltyper = 75 AND titleauthor.title_id = titles.title_id AND title = The Gourmet Microwave UPDATE titleauthor SET royaltyper = 35 FROM titleauthor, titles WHERE royaltyper = 25 AND titleauthor.title_id = titles.ti

16、tle_id AND title = The Gourmet Microwave,(续):,SAVE TRANSACTION percentchanged UPDATE titles SET price = price * 1.1 WHERE title = The Gourmet Microwave SELECT (price * royalty * ytd_sales) * royaltyper FROM titles, titleauthor WHERE title = The Gourmet Microwave AND titles.title_id = titleauthor.title_id ROLLBACK TRANSACTION percentchanged COMMIT TRANSACTION GO,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号