545掌握事务的基本概念及特性_第1页
545掌握事务的基本概念及特性_第2页
545掌握事务的基本概念及特性_第3页
545掌握事务的基本概念及特性_第4页
545掌握事务的基本概念及特性_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、授课顺序:授课顺序:20 授课学时:授课学时:3学时学时 教学方式:讲授教学方式:讲授基本要求:基本要求:(1) 掌握事务的基本概念及特性掌握事务的基本概念及特性 (2) 了解故障的种类及恢复实现技术了解故障的种类及恢复实现技术 第第10章章 数据库的恢复技术数据库的恢复技术10.1 事务的基本概念事务的基本概念10.2 数据库恢复概述数据库恢复概述10.3 故障的种类故障的种类10.4 恢复的实现技术恢复的实现技术10.5 恢复策略恢复策略10.6 具有检查点的恢复技术具有检查点的恢复技术10.7 数据库镜像数据库镜像10.8 小结小结 数据库的定义:数据库的定义: 数据库被破坏的原因,可归

2、纳为:数据库被破坏的原因,可归纳为: 软硬件故障,造成数据被破坏。软硬件故障,造成数据被破坏。 数据库的并发操作引起数据的不一致性。数据库的并发操作引起数据的不一致性。 自然或人为地破坏,如失火、失窃、病毒和自然或人为地破坏,如失火、失窃、病毒和为授权人的有意纂改数据。为授权人的有意纂改数据。 对数据库数据的更新操作有误,如操作时输对数据库数据的更新操作有误,如操作时输入错误的数据或存取数据库的程序有错等等。入错误的数据或存取数据库的程序有错等等。针对这四类问题,一般针对这四类问题,一般dbms提供了相应的功能:提供了相应的功能: 安全性保护:安全性保护:保护数据库防止恶意的破坏和非法保护数据

3、库防止恶意的破坏和非法的存取,防范对象:非法用户和非法操作。的存取,防范对象:非法用户和非法操作。 完整性保护:完整性保护:防止数据库中存在不符合语义的数防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。据,也就是防止数据库中存在不正确的数据。防范对象:不合语义的、不正确的数据防范对象:不合语义的、不正确的数据 (实体,参照)实体,参照) 数据库恢复:即系统失效后的数据库恢复,配合定数据库恢复:即系统失效后的数据库恢复,配合定时备份数据库,使数据库不丢失数据。时备份数据库,使数据库不丢失数据。 并发控制:即保证多用户能共享数据库,并维护数并发控制:即保证多用户能共享数据库,

4、并维护数据的一致性。据的一致性。 10.1 10.1 事务的基本概念事务的基本概念10.1.1 10.1.1 事务的定义事务的定义1.1.什么是事务什么是事务n事务事务是是由用户定义的一组操作序列,这些操作要么都做,由用户定义的一组操作序列,这些操作要么都做,要么都不做,是一个不可分割的工作单位要么都不做,是一个不可分割的工作单位, ,是恢复和并发是恢复和并发控制的基本单位控制的基本单位. .n是一种机制,它确保多个是一种机制,它确保多个sqlsql语句被当作语句被当作单个工作单元单个工作单元来来处理处理2 2 . .事务和程序是两个概念事务和程序是两个概念n在关系数据库中,一个事务可以是一条

5、在关系数据库中,一个事务可以是一条sqlsql语句,一组语句,一组sqlsql语句或整个程序语句或整个程序n一个应用程序通常包含多个事务一个应用程序通常包含多个事务3 3 . .定义事务定义事务n隐式方式隐式方式当用户没有显式地定义事务时,当用户没有显式地定义事务时,dbms按缺省规定自动划分事务按缺省规定自动划分事务n显式定义方式显式定义方式 n事务的事务的开始开始与与结束结束由用户显式控制。定义事务的语句由用户显式控制。定义事务的语句有三条:有三条:n begin transactionbegin transaction sql sql 语句语句 . commit commit rollb

6、ack rollbacknbegin transactionbegin transaction表示事务的开始;表示事务的开始;ncommitcommit表示事务的提交表示事务的提交 (事务正常结束事务正常结束 提交提交事务的所有操作事务的所有操作(读读+ +更新更新),事务中所有事务中所有对数据库的更新写回到磁盘上的物理数据库中去,对数据库的更新写回到磁盘上的物理数据库中去, 事务中所有对数据库的更新事务中所有对数据库的更新永久永久生效)生效)rollbackrollback表示事务的回滚,即在事务运行的过程中发生表示事务的回滚,即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务

7、中对数据了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的库的所有已完成的更新操作更新操作全部撤销,再回滚到事务开全部撤销,再回滚到事务开始时的状态始时的状态。n事务异常终止事务异常终止n事务运行的过程中发生了故障,不能继续执行事务运行的过程中发生了故障,不能继续执行n回滚事务的所有回滚事务的所有更新更新操作,所有已完成的操作,所有已完成的更新操作更新操作全部撤销全部撤销n事务滚回到事务滚回到开始开始时的状态时的状态10.1.2 10.1.2 事务的特征事务的特征n事务是由有限的数据库操作序列组成,但并不是任意的数据事务是由有限的数据库操作序列组成,但并不是任意的数据库操作序列都

8、能成为事务,为了保护数据的完整性,一般要库操作序列都能成为事务,为了保护数据的完整性,一般要求事务具有以下四个特征:原子性求事务具有以下四个特征:原子性 一致性一致性 隔离性隔离性 持久性持久性 acidacid准则准则1 1原子性(原子性(atomicatomic)n一个事务是一个不可分割的工作单位,事务在执行时,应该一个事务是一个不可分割的工作单位,事务在执行时,应该遵守遵守“要么不做,要么全做要么不做,要么全做”(nothing or allnothing or all)的原则,)的原则,即不允许事务部分的完成。即不允许事务部分的完成。n如果事务因故障没有完成,则该事务已做的操作认为是无

9、效如果事务因故障没有完成,则该事务已做的操作认为是无效的,在恢复时必须取消该事务对数据库的影响的,在恢复时必须取消该事务对数据库的影响n保证原子性的思路:对于要执行写操作的数据项,在磁盘上保证原子性的思路:对于要执行写操作的数据项,在磁盘上记录其旧值,若事务没能完成执行,旧值将被恢复,好像事记录其旧值,若事务没能完成执行,旧值将被恢复,好像事务从未执行务从未执行n保证原子性是保证原子性是dbmsdbms本身的责任,由本身的责任,由“事务管理部件事务管理部件”处理。处理。2 2一致性(一致性(consistencyconsistency)n事务对数据库的作用是数据库从一个一致状态转变到事务对数据

10、库的作用是数据库从一个一致状态转变到另一个一致状态。另一个一致状态。n所谓数据库的一致状态是指数据库中的数据满足完整所谓数据库的一致状态是指数据库中的数据满足完整性约束。性约束。n例如,银行企业中,例如,银行企业中,“从帐号从帐号a a转移资金额转移资金额r r到帐到帐号号b”b”是一个典型的事务,这个事务包括两个操是一个典型的事务,这个事务包括两个操作,从帐号作,从帐号a a中减去资金额中减去资金额r r和在帐号和在帐号b b中增加资中增加资金额金额r r。n定义一个事务,该事务包括两个操作定义一个事务,该事务包括两个操作n这两个操作要么全做,要么全不做这两个操作要么全做,要么全不做n全做或

11、者全不做,数据库都处于一致性状态。全做或者全不做,数据库都处于一致性状态。n如果只做一个操作,数据库就处于不一致性状态如果只做一个操作,数据库就处于不一致性状态。 可见事务的一致性与原子性是密切相关的。可见事务的一致性与原子性是密切相关的。n确保单个事务的一致性是对该事务编码的应用,确保单个事务的一致性是对该事务编码的应用,程序程序员的责任。员的责任。3 3隔离性(隔离性(isolationisolation)n一个事务的执行不能被其它事务干扰。一个事务的执行不能被其它事务干扰。n如果多个事务并发地执行,应像各个事务独立执如果多个事务并发地执行,应像各个事务独立执行一样。行一样。事务事务并发执

12、行的并发执行的结果和结果和某一串行执行某一串行执行的的结果相同结果相同。n事务并发执行的相对独立性,这是事务并发控制事务并发执行的相对独立性,这是事务并发控制的目标。的目标。n并发控制就是为了保证事务间的隔离性并发控制就是为了保证事务间的隔离性n隔离性保证:多个事务并发执行的结果和某一串隔离性保证:多个事务并发执行的结果和某一串行执行的结果相同行执行的结果相同t1的修改被的修改被t2覆盖了覆盖了!读读a=16aa-3写回写回a=13读读a=16aa-1写回写回a=15t2t14 4持久性(持久性(durabilitydurability)n指一个事务一旦提交,它对数据库中数指一个事务一旦提交,

13、它对数据库中数据的改变就应该是持久的,即使数据库据的改变就应该是持久的,即使数据库因故障而受到破坏,因故障而受到破坏,dbmsdbms也应该能够恢也应该能够恢复。复。n事务上述四个性质的英文术语的第一个字母为事务上述四个性质的英文术语的第一个字母为acidacid。因此,这四。因此,这四个性质以称为事务的个性质以称为事务的acidacid准则。准则。n下面是一个事务的例子,从帐号下面是一个事务的例子,从帐号a a转移资金额转移资金额r r到帐号到帐号b b:begin transactionbegin transaction read a aa-r if a0/* a 款不足款不足*/ the

14、n begin display “a款不足款不足”rollback endelse /* 拨款拨款 */ begin bb+r display “拨款完成拨款完成” commit endn这是对一个简单事务的完整的描述。这是对一个简单事务的完整的描述。n该事务有两个出口:该事务有两个出口:n当当a 帐号的款项不足时,事务以帐号的款项不足时,事务以rollback(撤销)命令结束,即撤销该事务的影响;(撤销)命令结束,即撤销该事务的影响;n另一个出口是以另一个出口是以commit(提交)命令结束,(提交)命令结束,完成从帐号完成从帐号a到帐号到帐号b的拨款。的拨款。n在在commit之前,即在数

15、据库修改过程中,数据可之前,即在数据库修改过程中,数据可能是不一致的,事务本身也可能被撤销。能是不一致的,事务本身也可能被撤销。n只有在只有在commit之后,事务对数据库所产生的变化之后,事务对数据库所产生的变化才对其他事务开放,这就可以避免其他事务访问不一才对其他事务开放,这就可以避免其他事务访问不一致或不存在的数据致或不存在的数据。 n事务的事务的acid特性可能遭到破坏的因素有:特性可能遭到破坏的因素有:1、多个事务并发运行,不同事务的操作交叉执行多个事务并发运行,不同事务的操作交叉执行;(dbms必须保证在此种情况下多个事务的交叉运必须保证在此种情况下多个事务的交叉运行不影响这些事务

16、的原子性,这是行不影响这些事务的原子性,这是dbms中的并中的并发控制机制的责任。发控制机制的责任。)2、事务在运行过程中被强行停止。事务在运行过程中被强行停止。(dbms必须保证必须保证被强行终止的事务对数据库和其它事务没有任何被强行终止的事务对数据库和其它事务没有任何影响,这是影响,这是dbms中的恢复机制的责任中的恢复机制的责任。)10.2 10.2 数据库的恢复数据库的恢复10.2.1 10.2.1 数据库恢复的含义数据库恢复的含义n虽然数据库系统中已采取一定的措施,来防止数据库虽然数据库系统中已采取一定的措施,来防止数据库的安全性和完整性的破坏,保证并发事务的正确执行,的安全性和完整

17、性的破坏,保证并发事务的正确执行,但数据库中的数据仍然无法保证绝对不遭受破坏,比但数据库中的数据仍然无法保证绝对不遭受破坏,比如计算机系统中硬件的故障、软件的的错误,操作员如计算机系统中硬件的故障、软件的的错误,操作员的失误,恶意的破坏等都有可能发生,这些故障的发的失误,恶意的破坏等都有可能发生,这些故障的发生影响数据库数据的正确性,甚至可能破坏数据库,生影响数据库数据的正确性,甚至可能破坏数据库,使数据库中的数据全部或部分丢失。使数据库中的数据全部或部分丢失。n数据库的恢复:数据库的恢复:把数据库从错误状态恢复到某一已知把数据库从错误状态恢复到某一已知的正确状态的正确状态( (亦称为一致状态

18、或完整状态亦称为一致状态或完整状态) ) 10.3 10.3 故障的种类故障的种类事务内部事务内部,系统故障系统故障,介质故障介质故障,计算机病毒计算机病毒1、事务内部的故障、事务内部的故障n有的是预期的(可以通过事务程序本身发现的有的是预期的(可以通过事务程序本身发现的)n有的是非预期的有的是非预期的begin transactionbegin transaction read a aa-r if a0/* a 款不足款不足*/ then begin display “a款不足款不足”rollback endelse /* 拨款拨款 */ begin bb+r display “拨款完成拨款

19、完成” commit end预期到的故障,发现预期到的故障,发现余额不足,则让事务余额不足,则让事务滚回,撤消已做的更滚回,撤消已做的更改,恢复数据库到正改,恢复数据库到正确的状态。确的状态。n事务内部更多的故障是非预期的,是不能由事务内部更多的故障是非预期的,是不能由应用程序处理的。如运算溢出、并发事务死应用程序处理的。如运算溢出、并发事务死锁等。以后,我们指的事务故障仅指这一类锁等。以后,我们指的事务故障仅指这一类非预期的故障。非预期的故障。n事务故障意味着事务没有达到预期的终点事务故障意味着事务没有达到预期的终点(commit 或者显式的或者显式的rollback),因此,因此,数据库可

20、能处于不正确的状态。恢复程序要数据库可能处于不正确的状态。恢复程序要在不影响其它事务运行的前提下,强行回滚在不影响其它事务运行的前提下,强行回滚(rollback)该事务,该事务,撤消该事务已经作撤消该事务已经作出的任何对数据库的修改,使得该事务好象出的任何对数据库的修改,使得该事务好象根本没有启动一样根本没有启动一样。这类恢复操作称为。这类恢复操作称为事务事务撤消撤消(undo)。2、系统故障、系统故障n系统故障是指系统在运行过程中,由于某种原因,系统故障是指系统在运行过程中,由于某种原因,造成系统停止运转,致使所有正在运行的事务都造成系统停止运转,致使所有正在运行的事务都以非正常方式终止,

21、要求系统重新启动。以非正常方式终止,要求系统重新启动。n引起系统故障的原因可能有:硬件错误如引起系统故障的原因可能有:硬件错误如cpucpu故故障、操作系统或障、操作系统或dbmsdbms代码错误、突然断电等。代码错误、突然断电等。n这时,内存中数据库缓冲区的内容全部丢失,存这时,内存中数据库缓冲区的内容全部丢失,存储在外部存储设备上的数据库并未破坏,但内容储在外部存储设备上的数据库并未破坏,但内容不可靠了不可靠了。n发生系统故障时,事务未提交发生系统故障时,事务未提交n恢复策略:强行撤消(恢复策略:强行撤消(undo)所有未完成事务)所有未完成事务n发生系统故障时,事务已提交,但缓冲区中的信

22、息发生系统故障时,事务已提交,但缓冲区中的信息尚未完全写回到磁盘上尚未完全写回到磁盘上。n恢复策略:重做(恢复策略:重做(redo)所有已提交的事务)所有已提交的事务n重做(重做(redo):有些己提交的事务对数据库的有些己提交的事务对数据库的更新结果还保留在缓冲区中,尚未写到磁盘上的更新结果还保留在缓冲区中,尚未写到磁盘上的物理数据库中,这也使数据库处于不一致状态,物理数据库中,这也使数据库处于不一致状态,因此应将这些事务己提交的结果重新写入数据库因此应将这些事务己提交的结果重新写入数据库3 3、介质故障、介质故障n介质故障是指系统在运行过程中,由于存储器介质受到破坏,介质故障是指系统在运行

23、过程中,由于存储器介质受到破坏,使存储在外存中的数据部分丢失或全部丢失。使存储在外存中的数据部分丢失或全部丢失。n这类故障比事务故障和系统故障发生的可能性要小,但这是这类故障比事务故障和系统故障发生的可能性要小,但这是最严重的一种故障,破坏性很大最严重的一种故障,破坏性很大。4、计算机病毒、计算机病毒n一种人为的故障或破坏,是一些恶作剧者研制的一种计算机一种人为的故障或破坏,是一些恶作剧者研制的一种计算机程序程序n可以繁殖和传播可以繁殖和传播n危害危害n破坏、盗窃系统中的数据破坏、盗窃系统中的数据n破坏系统文件破坏系统文件故障小结n各类故障,对数据库的影响有两种可能性各类故障,对数据库的影响有

24、两种可能性n一是数据库本身被破坏一是数据库本身被破坏n二是数据库没有被破坏,但数据可能不正确,这二是数据库没有被破坏,但数据可能不正确,这是由于事务的运行被非正常终止造成的是由于事务的运行被非正常终止造成的。 10.4 10.4 恢复的原理及其实现技术恢复的原理及其实现技术n数据库恢复的数据库恢复的基本原理十分简单,就是数据的冗余基本原理十分简单,就是数据的冗余。n数据库中任何一部分被破坏的或不正确的数据都可以数据库中任何一部分被破坏的或不正确的数据都可以利用存储在系统其它地方的冗余数据来修复。利用存储在系统其它地方的冗余数据来修复。n因此恢复系统应该提供两种类型的功能:因此恢复系统应该提供两

25、种类型的功能:n一种是一种是生成冗余数据生成冗余数据,即对可能发生的故障作某些,即对可能发生的故障作某些准备;准备;n另一种是另一种是冗余重建冗余重建,即利用这些冗余数据恢复数据,即利用这些冗余数据恢复数据库。库。n生成冗余数据最常用的技术是生成冗余数据最常用的技术是登记日志文件登记日志文件和和数据转数据转储储,在实际应用中,这两种方法常常结合起来一起使在实际应用中,这两种方法常常结合起来一起使用。用。 10.4.1 10.4.1 登记日志文件(登记日志文件(logginglogging)n日志文件日志文件是用来记录事务对数据库的更新操作的文件。是用来记录事务对数据库的更新操作的文件。对数据库

26、的每次修改,都将被修改项目的对数据库的每次修改,都将被修改项目的旧值和新值旧值和新值写在一个叫做运行日志的文件中,写在一个叫做运行日志的文件中,目的目的是为数据库的是为数据库的恢复保留详细的数据。恢复保留详细的数据。n典型的日志文件主要包含以下内容:典型的日志文件主要包含以下内容:1 1更新数据库的事务标识(标明是哪个事务);更新数据库的事务标识(标明是哪个事务);2 2操作的类型(插入、删除或修改)操作的类型(插入、删除或修改)3 3操作对象;操作对象;4 4更新前数据的旧值(对于插入操作而言,没有旧更新前数据的旧值(对于插入操作而言,没有旧值);值);5 5更新前数据的新值(对于删除操作而

27、言,没有新更新前数据的新值(对于删除操作而言,没有新值);值);6 6事务处理中的各个关键时刻(事务的开始、结束及事务处理中的各个关键时刻(事务的开始、结束及其真正回写的时间)。其真正回写的时间)。n日志文件是系统运行的历史记载,必须高度可靠。日志文件是系统运行的历史记载,必须高度可靠。n所以一般都是所以一般都是双副本双副本的,并且独立地写在两个不同类型的,并且独立地写在两个不同类型的设备上。的设备上。n日志的日志的信息量很大信息量很大,一般保存在海量存储器上。,一般保存在海量存储器上。n在对在对数据库修改数据库修改时,在运行日志中要时,在运行日志中要写入一个表示这个写入一个表示这个修改的运行

28、记录。修改的运行记录。n把把数据库的修改写到数据库数据库的修改写到数据库和把表示和把表示这个修改的日志记这个修改的日志记录写到日志文件录写到日志文件是两个不同的操作。是两个不同的操作。n为了防止在这两个操作之间发生故障后,运行日志中没为了防止在这两个操作之间发生故障后,运行日志中没有记录下这个修改,以后也无法撤消这个修改。为保证有记录下这个修改,以后也无法撤消这个修改。为保证数据库是可恢复的,登记日志文件必须遵循两条原则原数据库是可恢复的,登记日志文件必须遵循两条原则原则:则:n1.1.登记的次序严格按并发事务执行的时间登记的次序严格按并发事务执行的时间次序;次序;n2.2.必须先写日志文件,

29、后写数据库。必须先写日志文件,后写数据库。n先写原则蕴含了如下意义:如果出现故障,只先写原则蕴含了如下意义:如果出现故障,只可能是在日志文件中已经登记了所做的修改,可能是在日志文件中已经登记了所做的修改,但没有真正修改数据库,这样在系统重新启动但没有真正修改数据库,这样在系统重新启动进行恢复时,只是撤消或重做因发生事故而没进行恢复时,只是撤消或重做因发生事故而没有做过的修改,并不会影响数据库的正确性。有做过的修改,并不会影响数据库的正确性。而如果先写了数据库修改,而在运行记录中没而如果先写了数据库修改,而在运行记录中没有登记这个修改,则以后就无法恢复这个修改有登记这个修改,则以后就无法恢复这个

30、修改了。了。10.4.2 10.4.2 数据转储(数据转储(data dumpdata dump)n数据转储是数据转储是指定期地指定期地将整个数据库复制到多个存储设将整个数据库复制到多个存储设备如磁带、磁盘上保存起来的过程,它是数据库恢复备如磁带、磁盘上保存起来的过程,它是数据库恢复中采用的基本手段。中采用的基本手段。n转储的数据文本称为转储的数据文本称为后备副本后备副本或或后援副本后援副本,当数据库,当数据库遭到破坏后就可利用后援副本把数据库有效地加以恢遭到破坏后就可利用后援副本把数据库有效地加以恢复。复。n转储是十分耗费时间和资源的,不能频繁地进行,应转储是十分耗费时间和资源的,不能频繁地

31、进行,应该根据数据库使用情况确定一个适当的转储周期。该根据数据库使用情况确定一个适当的转储周期。n按照转储方式转储可以分为按照转储方式转储可以分为海量转储海量转储和和增量转储增量转储。n海量转储是指海量转储是指每次转储全部数据库每次转储全部数据库。n增量转储每次只增量转储每次只转储上次转储后被更新过的数据。转储上次转储后被更新过的数据。n按照转储状态转储又可分为按照转储状态转储又可分为静态转储静态转储和和动态转储动态转储。n静态转储期间不允许有任何数据存取活动,因静态转储期间不允许有任何数据存取活动,因而需在当前用户事务结束之后进行,新用户事而需在当前用户事务结束之后进行,新用户事务又需在转储

32、结束之后才能进行,这就降低了务又需在转储结束之后才能进行,这就降低了数据库的可用性。数据库的可用性。n动态转储则不同,它允许转储期间继续运行用动态转储则不同,它允许转储期间继续运行用户事务,但产生的副本并不能保证与当前状态户事务,但产生的副本并不能保证与当前状态一致。解决的办法是把转储期间各事务对数据一致。解决的办法是把转储期间各事务对数据库的修改活动登记下来,建立日志文件。库的修改活动登记下来,建立日志文件。n因此,因此,备用副本加上日志文件备用副本加上日志文件就能把数据库恢就能把数据库恢复到某一时刻的正确状态。复到某一时刻的正确状态。10.5 10.5 数据库恢复的策略数据库恢复的策略n根

33、据故障类型的不同,应该采取不同的恢复策略根据故障类型的不同,应该采取不同的恢复策略。1 1、事务故障(、事务故障(transaction failuretransaction failure)及其恢复)及其恢复n事务故障表示由非预期的、不正常的程序结束所造成事务故障表示由非预期的、不正常的程序结束所造成的故障。的故障。n发生事务故障时,被迫中断的事务可能已对数据库进发生事务故障时,被迫中断的事务可能已对数据库进行了修改,为了消除该事务对数据库的影响,要利用行了修改,为了消除该事务对数据库的影响,要利用日志文件中所记载的信息,日志文件中所记载的信息,强行回滚(强行回滚(rollbackrollb

34、ack)该)该事务,将数据库恢复到修改前的初始状态。事务,将数据库恢复到修改前的初始状态。n为此,要检查日志文件中由这些事务所引起的发生变为此,要检查日志文件中由这些事务所引起的发生变化的记录,取消这些没有完成的事务所做的一切改变。化的记录,取消这些没有完成的事务所做的一切改变。n这类恢复操作称为事务撤消(这类恢复操作称为事务撤消(undoundo),具体做法如下:),具体做法如下:1 1反向扫描日志文件反向扫描日志文件,查找该事务的更新操作。,查找该事务的更新操作。2 2对该事务的更新操作执行反操作对该事务的更新操作执行反操作,即对已经插入,即对已经插入的新记录进行删除操作,对已删除的记录进

35、行插入的新记录进行删除操作,对已删除的记录进行插入操作,对修改的数据恢复旧值,用旧值代替新值。操作,对修改的数据恢复旧值,用旧值代替新值。这样由后向前逐个扫描该事务己做所有更新操作,这样由后向前逐个扫描该事务己做所有更新操作,并做同样处理,直到扫描到此事务的开始标记,事并做同样处理,直到扫描到此事务的开始标记,事务故障恢复完毕。务故障恢复完毕。n因此,一个事务是一个工作单位,也是一个恢复单位。因此,一个事务是一个工作单位,也是一个恢复单位。n一个事务越短,越便于对它进行一个事务越短,越便于对它进行undoundo操作。如果一个操作。如果一个应用程序运行时间较长,则应该把该应用程序分成多应用程序

36、运行时间较长,则应该把该应用程序分成多个事务,用明确的个事务,用明确的commitcommit语句结束各个事务。语句结束各个事务。2 2、系统故障(、系统故障(system failuresystem failure)及其恢复)及其恢复n系统故障发生后,对数据库的影响有两种情况:系统故障发生后,对数据库的影响有两种情况:n一种情况是一些未完成事务对数据库的更新已写入数一种情况是一些未完成事务对数据库的更新已写入数据库,这样在系统重新启动后,要强行撤消(据库,这样在系统重新启动后,要强行撤消(undoundo)所有未完成事务,清除这些事务对数据库所做的修改。所有未完成事务,清除这些事务对数据库所

37、做的修改。这些未完成事务在日志文件中只有这些未完成事务在日志文件中只有begin transcationbegin transcation标记,而无标记,而无commitcommit标记。标记。n另一种情况是有些己提交的事务对数据库的更新结果另一种情况是有些己提交的事务对数据库的更新结果还保留在缓冲区中,尚未写到磁盘上的物理数据库中,还保留在缓冲区中,尚未写到磁盘上的物理数据库中,这也使数据库处于不一致状态,因此应将这些事务己这也使数据库处于不一致状态,因此应将这些事务己提交的结果重新写入数据库。这类恢复操作称为事务提交的结果重新写入数据库。这类恢复操作称为事务的重做(的重做(redoredo

38、)。这种己提交事务在日志文件中既有)。这种己提交事务在日志文件中既有begin transcationbegin transcation标记,也有标记,也有commitcommit标记标记。n因此,系统故障的恢复要完成两方面的工作,既要撤因此,系统故障的恢复要完成两方面的工作,既要撤消所有未完成的事务,还需要重做所有己提交的事务,消所有未完成的事务,还需要重做所有己提交的事务,这样才能将数据库真正恢复到一致的状态。具体做法这样才能将数据库真正恢复到一致的状态。具体做法如下:如下:1 1正向扫描日志文件,查找尚未提交的事务,将其正向扫描日志文件,查找尚未提交的事务,将其事务标识记入撤消队列。同时

39、查找已经提交的事事务标识记入撤消队列。同时查找已经提交的事务,将其事务标识记入重做队列。务,将其事务标识记入重做队列。2 2对撤消队列中的各个事务进行撤消处理。方法同对撤消队列中的各个事务进行撤消处理。方法同事务故障中所介绍的撤消方法相同。事务故障中所介绍的撤消方法相同。3 3对重做队列中的各个事务进行重做处理。进行重对重做队列中的各个事务进行重做处理。进行重做处理的方法是:正向扫描日志文件,按照日志做处理的方法是:正向扫描日志文件,按照日志文件中所登记的操作内容,重新执行操作,使数文件中所登记的操作内容,重新执行操作,使数据库恢复到最近某个可用状态。据库恢复到最近某个可用状态。3 3、介质故

40、障(、介质故障(media failuremedia failure)及其恢复)及其恢复n介质故障是指系统在运行过程中,由于辅助存储器介质介质故障是指系统在运行过程中,由于辅助存储器介质受到破坏,使存储在外存中的数据部分丢失或全部丢失。受到破坏,使存储在外存中的数据部分丢失或全部丢失。n这需要装入发生介质故障前最新的后备数据库副本,然这需要装入发生介质故障前最新的后备数据库副本,然后利用日志文件重做该副本后所运行的所有事务。后利用日志文件重做该副本后所运行的所有事务。n具体方法如下:具体方法如下:1装入最新的数据库副本,使数据库恢复到最近一次装入最新的数据库副本,使数据库恢复到最近一次转储时的

41、可用状态。转储时的可用状态。2装入最新的日志文件副本,根据日志文件中的内容装入最新的日志文件副本,根据日志文件中的内容重做已完成的事务。首先正向扫描日志文件,找出发重做已完成的事务。首先正向扫描日志文件,找出发生故障前已提交的事务,将其记入重做队例。再对重生故障前已提交的事务,将其记入重做队例。再对重做队列中的各个事务进行重做处理,做队列中的各个事务进行重做处理,n通过以上对三类故障的分析,我们可以看出故障发生后通过以上对三类故障的分析,我们可以看出故障发生后对数据库的影响有两种可能性:对数据库的影响有两种可能性:1数据库没有被破坏,但数据可能处于不一致状态。这数据库没有被破坏,但数据可能处于

42、不一致状态。这是由事务故障和系统故障引起的,这种情况在恢复时,是由事务故障和系统故障引起的,这种情况在恢复时,不需要重装数据库副本,直接根据日志文件,不需要重装数据库副本,直接根据日志文件,撤销故撤销故障发生时未完成的事务障发生时未完成的事务,并,并重做己完成的事务重做己完成的事务,使数,使数据库恢复到正确的状态。这类故障的恢复是系统在重据库恢复到正确的状态。这类故障的恢复是系统在重新启动时自动完成的,不需要用户干预。新启动时自动完成的,不需要用户干预。2数据库本身被破坏。这是由介质故障引起的,这种情数据库本身被破坏。这是由介质故障引起的,这种情况在恢复时,把最近一次转储的数据装入,然后况在恢

43、复时,把最近一次转储的数据装入,然后借助借助于日志文件于日志文件,再在此基础上对数据库进行更新,从而,再在此基础上对数据库进行更新,从而重建了数据库。这类重建了数据库。这类故障的恢复不能自动完成故障的恢复不能自动完成,需要,需要dba的介入,先由的介入,先由dba重装最近转储的数据库副本和重装最近转储的数据库副本和相应的日志文件的副本,再执行系统提供的恢复命令,相应的日志文件的副本,再执行系统提供的恢复命令,具体的恢复操作由具体的恢复操作由dbms来完成。来完成。n数据库恢复的基本原理就是利用数据的冗余的。数据库恢复的基本原理就是利用数据的冗余的。十分简单,实现的方法也比较清楚,但真正实十分简

44、单,实现的方法也比较清楚,但真正实现起来相当复杂,实现恢复的程序非常庞大,现起来相当复杂,实现恢复的程序非常庞大,常常占整个系统代码的百分之十以上。常常占整个系统代码的百分之十以上。n数据库系统所采用的恢复技术是否行之有效,数据库系统所采用的恢复技术是否行之有效,不仅对系统的可靠程度起着决定性使用,而且不仅对系统的可靠程度起着决定性使用,而且对系统的运行效率也有很大的影响,是衡量系对系统的运行效率也有很大的影响,是衡量系统性能优劣的重要指标统性能优劣的重要指标。10.6 10.6 具有检查点的恢复技术具有检查点的恢复技术一、问题的提出二、检查点技术检查点技术三、利用检查点的恢复策略三、利用检查

45、点的恢复策略一、问题的提出n两个问题两个问题n搜索整个日志将耗费大量的时间搜索整个日志将耗费大量的时间nredo处理:重新执行,浪费了大量时处理:重新执行,浪费了大量时间间解决方案n具有检查点(具有检查点(checkpoint)的恢复技术)的恢复技术n在日志文件中增加检查点记录(在日志文件中增加检查点记录(checkpoint)n增加重新开始文件增加重新开始文件n恢复子系统在登录日志文件期间动态地维护日志恢复子系统在登录日志文件期间动态地维护日志二、检查点技术n检查点记录的内容检查点记录的内容n1. 建立检查点时刻所有正在执行的事务清单建立检查点时刻所有正在执行的事务清单n2. 这些事务最近一

46、个日志记录的地址这些事务最近一个日志记录的地址n重新开始文件的内容重新开始文件的内容n记录各个检查点记录在日志文件中的地址记录各个检查点记录在日志文件中的地址具有检查点的日志文件和重新开始文件具有检查点的日志文件和重新开始文件 动态维护日志文件的方法n动态维护日志文件的方法动态维护日志文件的方法周期性地执行如下操作:建立检查点,保存数据库状态。周期性地执行如下操作:建立检查点,保存数据库状态。具体步骤是:具体步骤是:n1.将当前日志缓冲区中的所有日志记录写入磁盘的日志文将当前日志缓冲区中的所有日志记录写入磁盘的日志文件上件上n2.在日志文件中写入一个检查点记录在日志文件中写入一个检查点记录n3

47、.将当前数据缓冲区的所有数据记录写入磁盘的数据库中将当前数据缓冲区的所有数据记录写入磁盘的数据库中n4.把检查点记录在日志文件中的地址写入一个重新开始把检查点记录在日志文件中的地址写入一个重新开始文文件件建立检查点n恢复子系统可以定期或不定期地建立检查点恢复子系统可以定期或不定期地建立检查点,保存数据库状态保存数据库状态 n定期定期按照预定的一个时间间隔,如每隔一小时建立一个检查点按照预定的一个时间间隔,如每隔一小时建立一个检查点 n不定期不定期按照某种规则,如日志文件已写满一半建立一个检查点按照某种规则,如日志文件已写满一半建立一个检查点三、利用检查点的恢复策略n使用检查点方法可以改善恢复效

48、率使用检查点方法可以改善恢复效率n当事务当事务t在一个检查点之前提交在一个检查点之前提交 t对数据库所做的修改已写入数据库对数据库所做的修改已写入数据库n写入时间是在这个检查点建立之前或在这写入时间是在这个检查点建立之前或在这个检查点建立之时个检查点建立之时 n在进行恢复处理时,没有必要对事务在进行恢复处理时,没有必要对事务t执行执行redo操作操作tc (检查点检查点)tf(系统故障系统故障) redoundoundo redot2t3t4t5不要不要redot1系统出现故障时,恢复子系统将根据事务的不同状态采取不同的恢复策略系统出现故障时,恢复子系统将根据事务的不同状态采取不同的恢复策略

49、nt1:在检查点之前提交:在检查点之前提交nt2:在检查点之前开始执行,在检查点之后故障点之:在检查点之前开始执行,在检查点之后故障点之前提交前提交nt3:在检查点之前开始执行,在故障点时还未完成:在检查点之前开始执行,在故障点时还未完成nt4:在检查点之后开始执行,在故障点之前提交:在检查点之后开始执行,在故障点之前提交nt5:在检查点之后开始执行,在故障点时还未完成:在检查点之后开始执行,在故障点时还未完成恢复策略:恢复策略:nt3和和t5在故障发生时还未完成,所以予以撤销在故障发生时还未完成,所以予以撤销nt2和和t4在检查点之后才提交,它们对数据库所做的修在检查点之后才提交,它们对数据库所做的修改在故障发生时可能还在缓冲区中,尚未写入数据库,改在故障发生时可能还在缓冲区中,尚未写入数据库,所以要所以要redont1在检查点之前已提交,所以不必执行在检查点之前已提交,所以不必执行redo操作操作10.7 数据库镜像数据库镜像n介质故障是对系统影响最为严重的一种故障,严重影介质故障是对系统影响最为严重的一种故障,严重影响数据库的可用性响数据库的可用性n介质故障恢复比较费时介质故障恢复比较费时n为预防介质故障,为预防介质故障,dba必须周期性地转储数据库必须周期性地转储数据库n提高数据库可用性的解决方案提高数据库可用性的解决方案n数据库镜像(数据库镜

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论