数据库的恢复技术.ppt

上传人:少林足球 文档编号:4955406 上传时间:2020-01-19 格式:PPT 页数:61 大小:432.12KB
返回 下载 相关 举报
数据库的恢复技术.ppt_第1页
第1页 / 共61页
数据库的恢复技术.ppt_第2页
第2页 / 共61页
数据库的恢复技术.ppt_第3页
第3页 / 共61页
数据库的恢复技术.ppt_第4页
第4页 / 共61页
数据库的恢复技术.ppt_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《数据库的恢复技术.ppt》由会员分享,可在线阅读,更多相关《数据库的恢复技术.ppt(61页珍藏版)》请在三一文库上搜索。

1、,第10章 数据库的恢复技术,10.1 事务的基本概念 10.2 数据库恢复概述 10.3 故障的种类 10.4 恢复的实现技术 10.5 恢复策略 10.6 具有检查点的恢复技术 10.7 数据库镜像 10.8 小结,数据库的定义: 数据库被破坏的原因,可归纳为: 软硬件故障,造成数据被破坏。 数据库的并发操作引起数据的不一致性。 自然或人为地破坏,如失火、失窃、病毒和为授权人的有意纂改数据。 对数据库数据的更新操作有误,如操作时输入错误的数据或存取数据库的程序有错等等。,针对这四类问题,一般DBMS提供了相应的功能: 安全性保护:保护数据库防止恶意的破坏和非法的存取,防范对象:非法用户和非

2、法操作。 完整性保护:防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。 防范对象:不合语义的、不正确的数据 (实体,参照) 数据库恢复:即系统失效后的数据库恢复,配合定时备份数据库,使数据库不丢失数据。 并发控制:即保证多用户能共享数据库,并维护数据的一致性。,10.1 事务的基本概念 10.1.1 事务的定义 1.什么是事务 事务是由用户定义的一组操作序列,这些操作要么都做,要么都不做,是一个不可分割的工作单位,是恢复和并发控制的基本单位. 是一种机制,它确保多个SQL语句被当作单个工作单元来处理 2 .事务和程序是两个概念 在关系数据库中,一个事务可以是一条SQL语句

3、,一组SQL语句或整个程序 一个应用程序通常包含多个事务,3 .定义事务,隐式方式 当用户没有显式地定义事务时, DBMS按缺省规定自动划分事务 显式定义方式,事务的开始与结束由用户显式控制。定义事务的语句有三条: BEGIN TRANSACTION SQL 语句 COMMIT ROLLBACK BEGIN TRANSACTION表示事务的开始; COMMIT表示事务的提交 (事务正常结束 提交事务的所有操作(读+更新),事务中所有对数据库的更新写回到磁盘上的物理数据库中去, 事务中所有对数据库的更新永久生效),ROLLBACK表示事务的回滚,即在事务运行的过程中发生了某种故障,事务不能继续执

4、行,系统将事务中对数据库的所有已完成的更新操作全部撤销,再回滚到事务开始时的状态。 事务异常终止 事务运行的过程中发生了故障,不能继续执行 回滚事务的所有更新操作,所有已完成的更新操作全部撤销 事务滚回到开始时的状态,10.1.2 事务的特征 事务是由有限的数据库操作序列组成,但并不是任意的数据库操作序列都能成为事务,为了保护数据的完整性,一般要求事务具有以下四个特征:原子性 一致性 隔离性 持久性 ACID准则 1原子性(Atomic) 一个事务是一个不可分割的工作单位,事务在执行时,应该遵守“要么不做,要么全做”(nothing or all)的原则,即不允许事务部分的完成。 如果事务因故

5、障没有完成,则该事务已做的操作认为是无效的,在恢复时必须取消该事务对数据库的影响 保证原子性的思路:对于要执行写操作的数据项,在磁盘上记录其旧值,若事务没能完成执行,旧值将被恢复,好像事务从未执行 保证原子性是DBMS本身的责任,由“事务管理部件”处理。,2一致性(Consistency) 事务对数据库的作用是数据库从一个一致状态转变到另一个一致状态。 所谓数据库的一致状态是指数据库中的数据满足完整性约束。,例如,银行企业中,“从帐号A转移资金额R到帐号B”是一个典型的事务,这个事务包括两个操作,从帐号A中减去资金额R和在帐号B中增加资金额R。 定义一个事务,该事务包括两个操作 这两个操作要么

6、全做,要么全不做 全做或者全不做,数据库都处于一致性状态。 如果只做一个操作,数据库就处于不一致性状态。,可见事务的一致性与原子性是密切相关的。 确保单个事务的一致性是对该事务编码的应用,程序员的责任。,3隔离性(Isolation) 一个事务的执行不能被其它事务干扰。 如果多个事务并发地执行,应像各个事务独立执行一样。事务并发执行的结果和某一串行执行的结果相同。 事务并发执行的相对独立性,这是事务并发控制的目标。 并发控制就是为了保证事务间的隔离性 隔离性保证:多个事务并发执行的结果和某一串行执行的结果相同,T1的修改被T2覆盖了!,4持久性(Durability) 指一个事务一旦提交,它对

7、数据库中数据的改变就应该是持久的,即使数据库因故障而受到破坏,DBMS也应该能够恢复。,事务上述四个性质的英文术语的第一个字母为ACID。因此,这四个性质以称为事务的ACID准则。 下面是一个事务的例子,从帐号A转移资金额R到帐号B: BEGIN TRANSACTION READ A AA-R IF A0 /* A 款不足*/ THEN BEGIN DISPLAY “A款不足” ROLLBACK END ELSE /* 拨款 */ BEGIN BB+R DISPLAY “拨款完成” COMMIT END,这是对一个简单事务的完整的描述。 该事务有两个出口: 当A 帐号的款项不足时,事务以ROL

8、LBACK(撤销)命令结束,即撤销该事务的影响; 另一个出口是以COMMIT(提交)命令结束,完成从帐号A到帐号B的拨款。 在COMMIT之前,即在数据库修改过程中,数据可能是不一致的,事务本身也可能被撤销。 只有在COMMIT之后,事务对数据库所产生的变化才对其他事务开放,这就可以避免其他事务访问不一致或不存在的数据。,事务的ACID特性可能遭到破坏的因素有: 1、多个事务并发运行,不同事务的操作交叉执行;(DBMS必须保证在此种情况下多个事务的交叉运行不影响这些事务的原子性,这是DBMS中的并发控制机制的责任。) 2、事务在运行过程中被强行停止。(DBMS必须保证被强行终止的事务对数据库和

9、其它事务没有任何影响,这是DBMS中的恢复机制的责任。),10.2 数据库的恢复,10.2.1 数据库恢复的含义 虽然数据库系统中已采取一定的措施,来防止数据库的安全性和完整性的破坏,保证并发事务的正确执行,但数据库中的数据仍然无法保证绝对不遭受破坏,比如计算机系统中硬件的故障、软件的的错误,操作员的失误,恶意的破坏等都有可能发生,这些故障的发生影响数据库数据的正确性,甚至可能破坏数据库,使数据库中的数据全部或部分丢失。 数据库的恢复:把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态),10.3 故障的种类,事务内部,系统故障,介质故障,计算机病毒 1、事务内部的故障 有的

10、是预期的(可以通过事务程序本身发现的) 有的是非预期的,BEGIN TRANSACTION READ A AA-R IF A0 /* A 款不足*/ THEN BEGIN DISPLAY “A款不足” ROLLBACK END ELSE /* 拨款 */ BEGIN BB+R DISPLAY “拨款完成” COMMIT END,预期到的故障,发现余额不足,则让事务滚回,撤消已做的更改,恢复数据库到正确的状态。,事务内部更多的故障是非预期的,是不能由应用程序处理的。如运算溢出、并发事务死锁等。以后,我们指的事务故障仅指这一类非预期的故障。 事务故障意味着事务没有达到预期的终点(COMMIT 或者

11、显式的ROLLBACK),因此,数据库可能处于不正确的状态。恢复程序要在不影响其它事务运行的前提下,强行回滚(ROLLBACK)该事务,撤消该事务已经作出的任何对数据库的修改,使得该事务好象根本没有启动一样。这类恢复操作称为事务撤消(UNDO)。,2、系统故障 系统故障是指系统在运行过程中,由于某种原因,造成系统停止运转,致使所有正在运行的事务都以非正常方式终止,要求系统重新启动。 引起系统故障的原因可能有:硬件错误如CPU故障、操作系统或DBMS代码错误、突然断电等。 这时,内存中数据库缓冲区的内容全部丢失,存储在外部存储设备上的数据库并未破坏,但内容不可靠了。,发生系统故障时,事务未提交

12、恢复策略:强行撤消(UNDO)所有未完成事务 发生系统故障时,事务已提交,但缓冲区中的信息尚未完全写回到磁盘上。 恢复策略:重做(REDO)所有已提交的事务 重做(REDO):有些己提交的事务对数据库的更新结果还保留在缓冲区中,尚未写到磁盘上的物理数据库中,这也使数据库处于不一致状态,因此应将这些事务己提交的结果重新写入数据库,3、介质故障 介质故障是指系统在运行过程中,由于存储器介质受到破坏,使存储在外存中的数据部分丢失或全部丢失。 这类故障比事务故障和系统故障发生的可能性要小,但这是最严重的一种故障,破坏性很大。 4、计算机病毒 一种人为的故障或破坏,是一些恶作剧者研制的一种计算机程序 可

13、以繁殖和传播 危害 破坏、盗窃系统中的数据 破坏系统文件,故障小结,各类故障,对数据库的影响有两种可能性 一是数据库本身被破坏 二是数据库没有被破坏,但数据可能不正确,这是由于事务的运行被非正常终止造成的。,10.4 恢复的原理及其实现技术 数据库恢复的基本原理十分简单,就是数据的冗余。 数据库中任何一部分被破坏的或不正确的数据都可以利用存储在系统其它地方的冗余数据来修复。 因此恢复系统应该提供两种类型的功能: 一种是生成冗余数据,即对可能发生的故障作某些准备; 另一种是冗余重建,即利用这些冗余数据恢复数据库。 生成冗余数据最常用的技术是登记日志文件和数据转储,在实际应用中,这两种方法常常结合

14、起来一起使用。,10.4.1 登记日志文件(Logging) 日志文件是用来记录事务对数据库的更新操作的文件。对数据库的每次修改,都将被修改项目的旧值和新值写在一个叫做运行日志的文件中,目的是为数据库的恢复保留详细的数据。 典型的日志文件主要包含以下内容: 1更新数据库的事务标识(标明是哪个事务); 2操作的类型(插入、删除或修改) 3操作对象; 4更新前数据的旧值(对于插入操作而言,没有旧值);,5更新前数据的新值(对于删除操作而言,没有新值); 6事务处理中的各个关键时刻(事务的开始、结束及其真正回写的时间)。 日志文件是系统运行的历史记载,必须高度可靠。 所以一般都是双副本的,并且独立地

15、写在两个不同类型的设备上。 日志的信息量很大,一般保存在海量存储器上。 在对数据库修改时,在运行日志中要写入一个表示这个修改的运行记录。 把数据库的修改写到数据库和把表示这个修改的日志记录写到日志文件是两个不同的操作。 为了防止在这两个操作之间发生故障后,运行日志中没有记录下这个修改,以后也无法撤消这个修改。为保证数据库是可恢复的,登记日志文件必须遵循两条原则原则:,1.登记的次序严格按并发事务执行的时间次序; 2.必须先写日志文件,后写数据库。 先写原则蕴含了如下意义:如果出现故障,只可能是在日志文件中已经登记了所做的修改,但没有真正修改数据库,这样在系统重新启动进行恢复时,只是撤消或重做因

16、发生事故而没有做过的修改,并不会影响数据库的正确性。而如果先写了数据库修改,而在运行记录中没有登记这个修改,则以后就无法恢复这个修改了。,10.4.2 数据转储(Data Dump) 数据转储是指定期地将整个数据库复制到多个存储设备如磁带、磁盘上保存起来的过程,它是数据库恢复中采用的基本手段。 转储的数据文本称为后备副本或后援副本,当数据库遭到破坏后就可利用后援副本把数据库有效地加以恢复。 转储是十分耗费时间和资源的,不能频繁地进行,应该根据数据库使用情况确定一个适当的转储周期。 按照转储方式转储可以分为海量转储和增量转储。 海量转储是指每次转储全部数据库。 增量转储每次只转储上次转储后被更新

17、过的数据。,按照转储状态转储又可分为静态转储和动态转储。 静态转储期间不允许有任何数据存取活动,因而需在当前用户事务结束之后进行,新用户事务又需在转储结束之后才能进行,这就降低了数据库的可用性。 动态转储则不同,它允许转储期间继续运行用户事务,但产生的副本并不能保证与当前状态一致。解决的办法是把转储期间各事务对数据库的修改活动登记下来,建立日志文件。 因此,备用副本加上日志文件就能把数据库恢复到某一时刻的正确状态。,10.5 数据库恢复的策略 根据故障类型的不同,应该采取不同的恢复策略。 1、事务故障(Transaction Failure)及其恢复 事务故障表示由非预期的、不正常的程序结束所

18、造成的故障。 发生事务故障时,被迫中断的事务可能已对数据库进行了修改,为了消除该事务对数据库的影响,要利用日志文件中所记载的信息,强行回滚(ROLLBACK)该事务,将数据库恢复到修改前的初始状态。 为此,要检查日志文件中由这些事务所引起的发生变化的记录,取消这些没有完成的事务所做的一切改变。 这类恢复操作称为事务撤消(UNDO),具体做法如下:,1反向扫描日志文件,查找该事务的更新操作。 2对该事务的更新操作执行反操作,即对已经插入的新记录进行删除操作,对已删除的记录进行插入操作,对修改的数据恢复旧值,用旧值代替新值。这样由后向前逐个扫描该事务己做所有更新操作,并做同样处理,直到扫描到此事务

19、的开始标记,事务故障恢复完毕。 因此,一个事务是一个工作单位,也是一个恢复单位。 一个事务越短,越便于对它进行UNDO操作。如果一个应用程序运行时间较长,则应该把该应用程序分成多个事务,用明确的COMMIT语句结束各个事务。,2、系统故障(System Failure)及其恢复 系统故障发生后,对数据库的影响有两种情况: 一种情况是一些未完成事务对数据库的更新已写入数据库,这样在系统重新启动后,要强行撤消(UNDO)所有未完成事务,清除这些事务对数据库所做的修改。这些未完成事务在日志文件中只有BEGIN TRANSCATION标记,而无COMMIT标记。 另一种情况是有些己提交的事务对数据库的

20、更新结果还保留在缓冲区中,尚未写到磁盘上的物理数据库中,这也使数据库处于不一致状态,因此应将这些事务己提交的结果重新写入数据库。这类恢复操作称为事务的重做(REDO)。这种己提交事务在日志文件中既有BEGIN TRANSCATION标记,也有COMMIT标记。,因此,系统故障的恢复要完成两方面的工作,既要撤消所有未完成的事务,还需要重做所有己提交的事务,这样才能将数据库真正恢复到一致的状态。具体做法如下: 1正向扫描日志文件,查找尚未提交的事务,将其事务标识记入撤消队列。同时查找已经提交的事务,将其事务标识记入重做队列。 2对撤消队列中的各个事务进行撤消处理。方法同事务故障中所介绍的撤消方法相

21、同。 3对重做队列中的各个事务进行重做处理。进行重做处理的方法是:正向扫描日志文件,按照日志文件中所登记的操作内容,重新执行操作,使数据库恢复到最近某个可用状态。,3、介质故障(Media Failure)及其恢复 介质故障是指系统在运行过程中,由于辅助存储器介质受到破坏,使存储在外存中的数据部分丢失或全部丢失。 这需要装入发生介质故障前最新的后备数据库副本,然后利用日志文件重做该副本后所运行的所有事务。 具体方法如下: 1装入最新的数据库副本,使数据库恢复到最近一次转储时的可用状态。 2装入最新的日志文件副本,根据日志文件中的内容重做已完成的事务。首先正向扫描日志文件,找出发生故障前已提交的

22、事务,将其记入重做队例。再对重做队列中的各个事务进行重做处理,,通过以上对三类故障的分析,我们可以看出故障发生后对数据库的影响有两种可能性: 1数据库没有被破坏,但数据可能处于不一致状态。这是由事务故障和系统故障引起的,这种情况在恢复时,不需要重装数据库副本,直接根据日志文件,撤销故障发生时未完成的事务,并重做己完成的事务,使数据库恢复到正确的状态。这类故障的恢复是系统在重新启动时自动完成的,不需要用户干预。 2数据库本身被破坏。这是由介质故障引起的,这种情况在恢复时,把最近一次转储的数据装入,然后借助于日志文件,再在此基础上对数据库进行更新,从而重建了数据库。这类故障的恢复不能自动完成,需要

23、DBA的介入,先由DBA重装最近转储的数据库副本和相应的日志文件的副本,再执行系统提供的恢复命令,具体的恢复操作由DBMS来完成。,数据库恢复的基本原理就是利用数据的冗余的。十分简单,实现的方法也比较清楚,但真正实现起来相当复杂,实现恢复的程序非常庞大,常常占整个系统代码的百分之十以上。 数据库系统所采用的恢复技术是否行之有效,不仅对系统的可靠程度起着决定性使用,而且对系统的运行效率也有很大的影响,是衡量系统性能优劣的重要指标。,10.6 具有检查点的恢复技术,一、问题的提出 二、检查点技术 三、利用检查点的恢复策略,一、问题的提出,两个问题 搜索整个日志将耗费大量的时间 REDO处理:重新执

24、行,浪费了大量时间,解决方案,具有检查点(checkpoint)的恢复技术 在日志文件中增加检查点记录(checkpoint) 增加重新开始文件 恢复子系统在登录日志文件期间动态地维护日志,二、检查点技术,检查点记录的内容 1. 建立检查点时刻所有正在执行的事务清单 2. 这些事务最近一个日志记录的地址 重新开始文件的内容 记录各个检查点记录在日志文件中的地址,具有检查点的日志文件和重新开始文件,动态维护日志文件的方法,动态维护日志文件的方法 周期性地执行如下操作:建立检查点,保存数据库状态。 具体步骤是: 1.将当前日志缓冲区中的所有日志记录写入磁盘的日志文件上 2.在日志文件中写入一个检查

25、点记录 3.将当前数据缓冲区的所有数据记录写入磁盘的数据库中 4.把检查点记录在日志文件中的地址写入一个重新开始文件,建立检查点,恢复子系统可以定期或不定期地建立检查点,保存数据库状态 定期 按照预定的一个时间间隔,如每隔一小时建立一个检查点 不定期 按照某种规则,如日志文件已写满一半建立一个检查点,三、利用检查点的恢复策略,使用检查点方法可以改善恢复效率 当事务T在一个检查点之前提交 T对数据库所做的修改已写入数据库 写入时间是在这个检查点建立之前或在这个检查点建立之时 在进行恢复处理时,没有必要对事务T执行REDO操作,系统出现故障时,恢复子系统将根据事务的不同状态采取不同的恢复策略,T1

26、:在检查点之前提交 T2:在检查点之前开始执行,在检查点之后故障点之前提交 T3:在检查点之前开始执行,在故障点时还未完成 T4:在检查点之后开始执行,在故障点之前提交 T5:在检查点之后开始执行,在故障点时还未完成 恢复策略: T3和T5在故障发生时还未完成,所以予以撤销 T2和T4在检查点之后才提交,它们对数据库所做的修改在故障发生时可能还在缓冲区中,尚未写入数据库,所以要REDO T1在检查点之前已提交,所以不必执行REDO操作,10.7 数据库镜像,介质故障是对系统影响最为严重的一种故障,严重影响数据库的可用性 介质故障恢复比较费时 为预防介质故障,DBA必须周期性地转储数据库 提高数

27、据库可用性的解决方案 数据库镜像(Mirror),数据库镜像 DBMS自动把整个数据库或其中的关键数据复制到另一个磁盘上 DBMS自动保证镜像数据与主数据库的一致性, 每当主数据库更新时,DBMS自动把更新后的数据复制过去,镜像的实质也是备份,在同一时刻保存数据的两个或多个副本。 镜像与转储本质不同: 转储:定期或不定期的、间断、非实时 镜像一般是OS的功能硬盘级的 但DBMS为了防止介质出现故障而丢失数据 , 也提供了镜像功能. 如果条件许可,尽量使用OS级的硬盘级的镜像,SQL Server:镜像连续、实时的将一个 SQL Server设备上的信息复制到另一个设备上。 对该设备操作的所有事

28、件都复制到它的副本镜像设备上。如果两个设备中的一个损坏了,另一个设备由于保存了所有事件轨迹的最新拷贝,所以系统会完成自动切换,并保存系统连读工作。,没有出现故障时 可用于并发操作 一个用户对数据加排他锁修改数据,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁,频繁地复制数据自然会降低系统运行效率 在实际应用中用户往往只选择对关键数据和日志文件镜像,而不是对整个数据库进行镜像,小结,如果数据库只包含成功事务提交的结果,就说数据库处于一致性状态。保证数据一致性是对数据库的最基本的要求。 事务是数据库的逻辑工作单位 DBMS保证系统中一切事务的原子性、一致性、隔离性和持续性,DBMS必须对事务故障、系统故障和介质故障进行恢复 恢复中最经常使用的技术:数据库转储和登记日志文件 恢复的基本原理:利用存储在后备副本、日志文件和数据库镜像中的冗余数据来重建数据库,常用恢复技术 事务故障的恢复 UNDO 系统故障的恢复 UNDO + REDO 介质故障的恢复 重装备份并恢复到一致性状态 + REDO,提高恢复效率的技术 检查点技术 可以提高系统故障的恢复效率 可以在一定程度上提高利用动态转储备份进行介质故障恢复的效率 镜像技术 镜像技术可以改善介质故障的恢复效率,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1