收藏 分享(赏)

第十章 数据库的恢复技术.ppt

上传人:fmgc7290 文档编号:8527343 上传时间:2019-07-01 格式:PPT 页数:41 大小:265.50KB
下载 相关 举报
第十章 数据库的恢复技术.ppt_第1页
第1页 / 共41页
第十章 数据库的恢复技术.ppt_第2页
第2页 / 共41页
第十章 数据库的恢复技术.ppt_第3页
第3页 / 共41页
第十章 数据库的恢复技术.ppt_第4页
第4页 / 共41页
第十章 数据库的恢复技术.ppt_第5页
第5页 / 共41页
点击查看更多>>
资源描述

1、1,第十章 数据库恢复技术,2,教学目的:理解事务的相关概念及其特性理解三种故障以及其恢复技术掌握backup和restore命令 重点难点:事务的概念和特性 教学方法:多媒体教学 教学课时:2课时,3,10.1 事务的基本概念,事务(transaction)是用户为完成一次任务所进行的一系列操作(一段用户程序)或者是为完成某种任务在机器上单独执行的一个程序。这些操作要么全做,要么全不做,是一个不可分割的工作单元。,例:某公司在银行中有A,B两个帐号,现在公司想从帐号A中取出1万元,存入帐号B。那么在A中取出1万元的操作和在B中增加1万元的操作要么都成功完成,要么都不做。因此,需要把这二个操作

2、定义在一个事务中。 银行转帐:事务T从A帐户过户10000到B帐户。T:read(A);A := A 10000;write(A);read(B);B := B + 10000;write(B);,read(X):从数据库传送数据项X到事务的工作区中。 write(X):从事务的工作区中将数据项X写回数据库。,5,事务是一种机制,它确保多个SQL语句被当作单个工作单元来处理。事务的开始与结束可以由用户显式控制。如果用户没有显式地定义事务,则由DBMS按缺省规定自动划分事务。在SQL语言中,定义事务的语句有三条:BEGIN TRANSACTIONCOMMITROLLBACK 事务通常是以BEGI

3、N TRANSACTION开始,以COMMIT或ROLLBACK结束。COMMIT表示提交,即提交事务的所有操作。具体地说就是将事务中所有对数据库的更新写回磁盘上的物理数据库中,事务正常结束。一旦提交就不能撤销。 ROLLABCK表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤消,回滚到事务开始时的状态。,6,SQL Server中有关事务处理的语句包括:BEGIN TRANSACTION:建立一个显式事务。COMMIT TRANSACTION:标识一个显式事务或隐式事务正常结束而提交。SAVE TRANSACTION:在事务内定义一

4、 个存储点标记。ROLLBACK TRANSACTION:回滚事务。,一、事务的处理语句,7,(1)定义和提交事务,BEGIN TRANSACTION和COMMIT TRANSACTION的语句格式: BEGIN TRANSACTION 事务名称 SQL 语句 COMMIT TRANSACTION,说明: 哪些SQL语句组成一个事务由用户根据情况而定。 定义一个事务时,BEGIN TRANSACTION语句与COMMIT TRANSACTION语句必须成对出现。,8,例: begin transaction hj delete from student where 学号=b003 delete

5、 from sc where 学号=b003 commit transaction,9,回滚事务就是消除事务执行的影响。 语句格式: ROLLBACK TRANSACTION 事务名称|存储点名称 该语句回滚整个事务或是存储点定义以后所发生的事务。 ROLLBACK TRANSACTION语句应在COMMIT TRANSACTION语句之前调用。因为一旦提交就不能撤销。,(2) 回滚事务,例: begin transaction hj delete from student where 学号=b004 rollback transaction,10,(3) 定义存储点标记,在事务内建立一个存储

6、点标记。在存储点标记之前事务所完成的更新操作已提交到数据库中,不能回滚。在存储点名称标记之后事务执行的部分操作可以由ROLLBACK TRANSACTION语句回滚,即只能回滚在存储点名称标记之后事务执行的部分操作。SAVE TRANSACTION语句的格式为:SAVE TRANSACTION 存储点名称,11,例:下面例子说明怎样建立一个用户定义事务及事务中的存储点、回滚操作和事务提交操作。BEGIN TRANSACTION demoSELECT * FROM studentINSERT student(学号,姓名) VALUES (b100,张三)SAVE TRANSACTION save

7、_demo /*存储点*/INSERT student(学号,姓名) VALUES (b101,李四)SELECT * FROM studentROLLBACK TRANSACTION save_demo /*回滚*/COMMIT TRANSACTIONSELECT * FROM student,12,二、事务的特性,原子性(Atomicity):all-or-none,A贷方-100万,B借贷+100万,即事务中的诸操作要么都做,要么都不做。当事务非正常终止时,其中间结果将被取消。事务的原子性保证数据库的状态总是从一个一致性的状态变化到另一个一致性的状态,而不会出现不一致的中间状态。 一致性

8、(Consistency):又称可串行性,并发执行的几个事务,其操作结果应与以某种顺序串行执行这几个事务所得出的结果相同,因此称为可串行性。这种可串行性的并发调度是由数据库系统的并发控制机制来完成的,以保证并发事务执行时的数据库状态的一致。如转账平衡,A+B的总和不变。,13,分离性(Isolation):一个事务执行,不被其他事务所干扰。一个没执行完的事务不能在其提交之前把自己的中间结果提供给其他的事务使用。因为未提交的结果不是最终的结果,它有可能在以后的执行中被迫取消,如果其他的事务用到了它的中间结果,那么该事务也要夭折。如果这些事务已有的被提交了,则其结果也不得不被取消,从而和持久性相背

9、,所以隔离性对有效实现事务的概念是非常重要的。 持久性(Durability):永久性,提交事务后,不受其他操作或故障影响。,14,保证事务ACID特性是事务管理的重要任务。 事务ACID特性可能遭到破坏的因素有: (1)多个事务并行运行时,不同事务的操作交叉执行。 (2)事务在运行时被强行停止。 在第一种情况下,数据库管理系统必须保证多个事务的交叉运行不影响这些事务的原子性。在第二种情况下,数据库管理系统必须保证被强行终止的事务对数据库和其他事务没有任何影响。,15,10.2 数据库恢复概述,数据库恢复操作是指在系统出现故障时,由系统管理员或数据库所有者从数据库备份和日志文件的备份中恢复系统

10、或用户数据库。数据库恢复的目标是使之恢复到故障发生之前数据库最后的完整性状态。,16,故障是不可避免的,故障的由来: 计算机硬件故障 系统软件和应用软件的错误 操作员的失误 恶意的破坏 故障造成的影响 运行事务非正常中断 影响数据库数据的正确性 破坏数据库,使数据库全部或部分数据丢失,17,10.3 数据库系统的主要故障,数据库系统可能发生的主要故障有三种:-事务故障-系统故障-介质故障-计算机病毒,18,事务故障的概念不丢失信息故障。是指事务在运行过程中由于命令无法执行使事务未运行至正常终止点而夭折的情况。如:输入数据有误、运算溢出、违反了某些完整性限制、某些应用程序出错、并行事务发生死锁。

11、,事务故障的恢复发生事务故障时,夭折的事务可能已对数据库进行了修改。恢复程序要在不影响其他事务运行的情况下,强行回滚(rollback)该事务,即撤销该事务已经作出的任何对数据库的修改,使得该事务好像根本没有启动一样。这类恢复操作称为撤销(undo)。,1、事务故障,19,例:银行转帐事务,把一笔金额从A转到B。 begin transactionselect balance from accout where account_no=A; balance_A=balance; balance_A= Balance_A-amount; if(balance_A0) then 打印“金额不足,不能

12、转帐“;rollback; else update account set balance= balance_A where account_no=A; select balance from account where account_no=B; balance_B=balance ; balance_B=balance_B+account; update account set balance=balance_B where account_no=B; commit transaction,20,2、系统故障,什么是系统故障(软故障Soft Crash)丢失主存信息故障。是指系统在运行过程

13、中,由于某种原因,如操作系统或DBMS代码错误、操作员操作失误、特定类型的硬件错误(如CPU故障)、突然停电等造成系统停止运行,致使所有正在运行的事务都非正常终止。内存中数据库缓冲区的信息全部丢失,但存储在外部存储设备上的数据未受破坏等情况。,系统故障的恢复系统故障造成数据库不一致状态的原因有两个,一是一些未完成事务对数据库的更新已写入数据库,二是一些已提交事务对数据库的更新还留在缓冲区,没来得及写入数据库。因此,恢复操作就是要撤消故障发生时未完成的事务,重做(redo)已完成的事务。,21,3、介质故障,什么是介质故障(硬故障Hard Crash)丢失辅存中信息的故障。是指系统在运行过程中,

14、由于某种硬件故障,如磁盘损坏、磁头碰撞、或操作系统的某种潜在错误,瞬时强磁场干扰等使存储在外存中的数据部分丢失或全部丢失的情况。,介质故障的恢复发生介质故障后,存储在磁盘上的数据被破坏,这时需要装入数据库发生介质故障前某个时刻的数据副本,并重新做自此开始的所有成功事务,将这些事务已提交的结果重新记入数据库中。,22,4、计算机病毒,什么是计算机病毒是指是一种人为的故障和破坏,是一些搞恶作剧的人研制的一种计算机程序,可以繁殖和传播。 对数据库系统的影响:-占用系统内存,影响数据库系统的运行速度和响应时间-破坏数据库文件,造成数据丢失。 应对措施:通过预防病毒的软件防止病毒侵害通过杀毒软件检查和消

15、灭病毒通过修护恢复数据库系统的运行和数据,23,说明: 事务故障和系统故障由系统自动完成的,不需要用户干预,而介质故障的恢复需要DBA的介入,但DBA之需要重装最近转储的数据库副本和有关的各日志文件副本,然后执行系统提供的恢复命令即可,具体的恢复操作仍由DBMS完成。 三类故障对数据库的影响有两种可能性:-数据库本身被破坏介质故障-数据库没有破坏,但数据可能不正确,这是因为事务的运行被非正常终止造成的事务故障和系统故障 恢复的基本原理冗余。这就是说,数据库中任何一部分被破坏的或不正确的数据可以根据存储在系统别处的冗余数据来重建。,24,数据库恢复的关键问题是: 第一:如何建立冗余数据所谓数据冗

16、余,就是备用的数据文本,称为后备副本或后援副本。 第二:如何利用这些冗余数据实施数据库恢复,10.4 恢复的实现技术,建立冗余数据最常用的技术是: 数据转储:即DBA定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。 登记日志文件:用来记录事务对数据库的更新操作的文件 通常是两种方法一起使用。,25,10.4.1 数据库转储(备份),静态转储:系统中无运行事务时进行,转储期间不允许存取、修改(保证得到一致性副本)。它降低了数据库的可用性。 动态转储:与用户事务并发进行,允许存取、修改。需要记录数据库的修改活动(如建立日志文件)。 海量转储:转储全部数据库内容,这种方式转储数量大,但恢复

17、方便。 增量转储:只转储上次转储以来更新过的数据,这种方法适合处理频繁更新的大型数据库。转储量较小,但恢复复杂。,26,动态转储可以克服静态转储的确定时间,不用等待正在运行的用户事务结束,也不会影响新事务的运行。但是动态转储结束时备份的数据不能保证正确有效。为此,必须把转储期间事务对数据库的修改活动记录下来,存储到日志文件中。这样,备份数据库和日志文件一起就可以把数据库恢复到某一时刻的正确状态。,27,10.4.2 日志和日志文件,日志文件是用来记录对数据库更新活动的文件。所有事务的更新日志都放在同一个日志文件中。日志文件和转储磁介质都看作是不可侵犯的永久性资源,它们是数据库赖以恢复的基础。因

18、此,日志文件应该存放在与数据库不同的介质中,避免因磁盘损坏两者都丢失。如果因为条件限制必须存放在同一介质中,应该比较频繁地备份日志文件到其他介质上,甚至采用多备份技术。 DBMS对数据库的每个更新操作(增加、删除、修改)作为一个日志记录写到日志文件中,并严格按照事务执行的时间顺序登记。从而,依据日志文件可以实现把数据库返绕到以前某年某日某时刻的一致性状态。日志的积累非常占用资源空间。但是对于恢复数据库来说,只是在最近备份数据库以后的日志记录才有价值。因此,日志文件需要随着数据库备份,经常进行截断。,28,事务故障的恢复步骤:,1. 反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新

19、操作。 2. 对该事务的更新操作执行逆操作。即将日志记录中“更新前的值” 写入数据库。 插入操作, “更新前的值”为空,则相当于做删除操作 删除操作,“更新后的值”为空,则相当于做插入操作 若是修改操作,则相当于用修改前值代替修改后值,3. 继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。 4. 如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了。,10.5 恢复策略,10.5.1 事务故障的恢复,29,发生系统故障可能导致未完成事务对数据库的更新已写入数据库;已提交事务对数据库的更新还留在缓冲区,没来得及写入数据库。恢复操作就是要撤销(undo)故障发生时未完成的事务

20、,重做(redo)已完成的事务。系统故障的恢复是由系统在重新启动时自动完成,不需用户干预。,10.5.2 系统故障的恢复,30,系统故障的恢复步骤:,1.正向扫描日志文件(即从头扫描日志文件) 重做(REDO) 队列: 在故障发生前已经提交的事务 这些事务既有BEGIN TRANSACTION记录,也有COMMIT记录 撤销 (Undo)队列:故障发生时尚未完成的事务这些事务只有BEGIN TRANSACTION记录,无相应的COMMIT记录,2. 对撤销(Undo)队列事务进行撤销(UNDO)处理 反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作 即将日志记录中“更新前的值”写入数据

21、库 3. 对重做(Redo)队列事务进行重做(REDO)处理 正向扫描日志文件,对每个REDO事务重新执行登记的操作 即将日志记录中“更新后的值”写入数据库,31,10.5.3 介质故障的恢复,恢复步骤 1. 装入最新的后备数据库副本(离故障发生时刻最近的转储副本) ,使数据库恢复到最近一次转储时的一致性状态。 对于静态转储的数据库副本,装入后数据库即处于一致性状态 对于动态转储的数据库副本,还须同时装入转储时刻的日志文件副本,利用与恢复系统故障的方法(即REDO+UNDO),才能将数据库恢复到一致性状态。,32,2. 装入有关的日志文件副本(转储结束时刻的日志文件副本) ,重做已完成的事务。

22、 首先扫描日志文件,找出故障发生时已提交的事务的标识,将其记入重做队列。 然后正向扫描日志文件,对重做队列中的所有事务进行重做处理。即将日志记录中“更新后的值”写入数据库。,33,日志文件在数据库恢复中有很重要的作用。可以用来进行事务故障恢复和系统故障恢复,并协助备份进行介质故障恢复。 在事务故障恢复和系统故障恢复时必须用日志文件;在动态转储时必须建立日志文件,利用备份和日志文件综合起来才能恢复数据库,不产生数据库不一致的现象;当数据库毁坏的时候,可以重新装入转储的后备映象恢复到转储结束的正确状态,然后利用日志文件,把已经完成的事务进行REDO处理,把未完成的事务进行UNDO处理,这样不必重新

23、运行已完成的事务程序就可已恢复到故障前某一时刻的正确状态。,34,数据库的备份包括对数据库结构和数据以及事务日志文件的备份,以便在数据库遭到破坏的时候能够及时的加以恢复。备份是数据库管理系统的重要功能,也是系统管理员(sa)的日常工作,因此,执行备份操作必须有对数据库备份的权限许可。 可以对数据库进行备份的角色包括: 系统管理员(sa) 数据库拥有者(db_owner) 数据库备份执行者(db_backupoperator),补充:数据库备份与还原,35,通过SQL语句BACKUP来实现。 语法格式: BACKUP Database|LOG database_name|database_nam

24、e_var TO ,nWITH DIFFERENTIAN 参数说明: DATABASE:指定一个完整的数据库备份。假如指定了一个文件和文件组的列表,那么仅有这些被指定的文件和文件组被备份。,1、备份,36,LOG:指定只备份事务日志。该日志是从上一次成功执行了的 LOG 备份到当前日志的末尾。 database_Name|database_Name_var:指定了一个数据库,从该数据库中对事务日志、部分数据库或完整的数据库进行备份。 WITH DIFFERENTIAN:表示增量备份数据库。 backup_device_name:指定备份操作时要使用的逻辑设备或物理备份设备。注意:事先必须建立逻

25、辑设备和物理设备之间的对应关系。,37,例:备份的例题。 exec sp_addumpdevice disk,gr,d:sqlmssqlbackupdj/*创建逻辑设备和物理设备*/ backup database db_student to gr/*用逻辑设备名备份数据库“db_student”*/ backup database db_student to disk=d:sqlmssqlbackupdj/*用物理设备名备份数据库“db_student”*/ exec sp_addumpdevice disk,grlog,d:sqlmssqlbackupdjlog/*创建逻辑设备和物理设备*

26、/ backup log db_student to grlog/*用逻辑设备名备份数据库“db_student”*/,38,2、恢复,SQL Server数据库恢复操作通过SQL语句RESTORE来实现。 RESTORE语句的语法格式:,RESTORE DATABASE|LOG database_name|database_name_var FROM ,n,39,参数说明:DATABASE:指定从备份还原整个数据库。如果指定了文件和文件组列表,则只还原那些文件和文件组。database_name | database_name_var:是将日志或整个数据库还原到的数据库。FROM:指定从中还

27、原备份的备份设备。如果没有指定 FROM 子句,则不会发生备份还原,而是恢复数据库。,40,例1:从dj物理备份设备中恢复db_student数据库: RESTORE DATABASE db_student FROM disk= d:sqlmssqlbackupdj,注意:数据库在运行时是不允许恢复的,必须断开所有到数据库的连接。,41,小结: 1、理解事务的基本概念和特性 2、数据库系统中的三个主要故障。介质故障破坏了数据库;事务故障和系统故障没有破坏数据库,但使数据库中的某些数据变得不正确。 3、数据库恢复的策略:重点是日志文件和数据库的转储。 4、REDO和UNDO的操作。 5、掌握backup和restore命令。,

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报