收藏 分享(赏)

第十章 数据库保护.ppt

上传人:hyngb9260 文档编号:7734388 上传时间:2019-05-24 格式:PPT 页数:85 大小:1.25MB
下载 相关 举报
第十章 数据库保护.ppt_第1页
第1页 / 共85页
第十章 数据库保护.ppt_第2页
第2页 / 共85页
第十章 数据库保护.ppt_第3页
第3页 / 共85页
第十章 数据库保护.ppt_第4页
第4页 / 共85页
第十章 数据库保护.ppt_第5页
第5页 / 共85页
点击查看更多>>
资源描述

1、计算机学院 杜海舟,数据库原理与应用,第十章 数据库保护,事务,并发控制,数据库的恢复,SQL Server数据库备份与恢复,10.1 事务,事务(Transaction):数据库应用中构成单一逻辑工作单元的操作集和。用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。 事务和程序是两个概念: 在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序; 一个应用程序通常包含多个事务。事务是恢复和并发控制的基本单位。,10.1.1 事务的定义,显式定义方式BEGIN TRANSACTION BEGIN TRANSACTION SQL 语句 SQL

2、语句 。 。COMMIT ROLLBACK,隐式方式当用户没有显式地定义事务时,DBMS按缺省规定自动划分事务。,COMMIT提交 事务正常结束; 提交事务的所有操作(更新); 事务中所有对数据库的更新永久生效。,ROLLBACK回滚 事务异常终止; 事务运行的过程中发生了故障,不能继续执行; 将事务中对数据库的所有已完成的操作全部撤消(更新操作); 事务回滚到开始时的状态。,10.1.2 事务的ACID特性,事务的特性ACID特性,原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持续性(Durability ),10.1.2 事务的ACID特性,事务是

3、数据库的逻辑工作单位。 事务中包括的诸操作要么都做,要么都不做,是不可拆分的。 由DBMS的事务管理子系统实现.,1. 原子性,10.1.2 事务的ACID特性,2. 一致性,事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态,即数据不会因为事务的执行而遭到破坏。,一致性状态:数据库中只包含成功事务提交的结果。 不一致状态:数据库中包含失败事务的结果。,由DBMS的完整性子系统实现。,10.1.2 事务的ACID特性,例:银行转帐:从帐号A中取出一万元,存入帐号B。 定义一个事务,该事务包括两个操作:,这两个操作要么全做,要么全不做。 全做或者全不做,数据库都处于一致性状态。 若

4、只做一个操作,数据库就处于不一致性状态。,10.1.2 事务的ACID特性,3. 隔离性,一个事务的执行不能被其他事务干扰。(针对并发执行而言的) 一个事务内部的操作及使用的数据对其他并发事务是隔离的; 并发执行的各个事务之间不能互相干扰。,由DBMS的并发控制子系统实现。,10.1.2 事务的ACID特性,T1的修改被T2覆盖了!,10.1.2 事务的ACID特性,4. 持久性,事务一旦提交,它对数据库中数据的改变就应该是永久性的。 接下来的其他操作或故障不应该对其执行结果有任何影响; 即使在写入磁盘之前,系统发生故障,在下次启动之后,也应保障数据更新的有效。,保证事务ACID特性是事务处理

5、的重要任务; 破坏事务ACID特性的因素: 多个事务并行运行时,不同事务的操作交叉执行; 事务在运行过程中被强行停止。,注:,由DBMS的恢复管理子系统实现。,10.1.2 事务的ACID特性,转账操作: T:read(A);A :=A-50;write(A);read(B);B:=B+50; write(B)。,转账操作: T: BEGIN TRANSACTIONread(A);A:=A-50;write(A);if(A0) ROLLBACK;else read (B);B:=B+50;write(B);COMMIT;,10.1.3 事务的状态,(1)活动状态:事务开始运行就进入活动状态,直

6、到部分提交或失败。BEGIN-TRANSACTION:事务进入活动状态。 (2)局部提交状态:事务执行完最后一条语句,即执行完END-TRANSACTION命令之后进入局部提交状态。,10.1.3 事务的状态,(3)失败状态:发现一个事务不能正常运行下去时。DBMS消除事务中所有操作对数据库和其他事务的影响,结束事务的运行。 (4)异常中止状态:当一个失败事务对数据库和其他事务的影响被消除,数据库恢复到该事务开始执行前的状态之后,该失败事务退出DBS,进入异常结束状态。,(5)提交状态:当一个事务成功地完成了所有操作,并且所有操作对数据库的影响都已永久地存入数据库之后,该事务退出DBS,进入提

7、交状态,正常结束。COMMIT-TRANSACTION:事务进入提交状态。,事务的提交状态和异常中止状态都事务的结束状态。,10.2 并发控制,同时并发方式(simultaneous concurrency) 多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行。,事务并发执行带来的问题 会产生多个事务同时存取同一数据的情况 可能会存取和存储不正确的数据,破坏事务一致性和数据库的一致性,10.2.1 并发操作与数据的不一致性,T1的修改被T2覆盖了!,数据不一致实例:飞机订票系统,并发控制机制的任务 对并发操作进行正确调度 保证事务的隔离性 保

8、证数据库的一致性,并发操作带来的数据不一致性,丢失更新(lost update) 不可重复读(non-repeatable read) 读“脏”数据(dirty read),10.2.1 并发操作与数据的不一致性,1. 丢失更新,指两个事务T1与T2从数据库中读入同一数据并修改,T2的提交结果破坏了T1提交的结果,导致T1的修改被丢失。,10.2.1 并发操作与数据的不一致性,2. 不可重复读,指T1读取数据后,T2执行更新操作,使T1无法再现前一次读取结果。,10.2.1 并发操作与数据的不一致性,不可重复读包括三种情况: T1读取某一数据后,T2对其做了修改,当T1再次读该数据时,得到与前

9、一次不同的值。 T1按一定条件从数据库中读取某些数据记录后,T2删除了其中部分记录,当T1再次读取数据时,发现某些记录神密地消失了。 T1按一定条件从数据库中读取某些数据记录后,T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。 后两种不可重复读有时也称为幻影现象。,10.2.1 并发操作与数据的不一致性,3. 读“脏”数据,指T1修改某一数据,并将其写回磁盘,T2读取同一数据后,T1由于某种原因被撤消,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,是不正确的数据,又称为“脏”数据。,10.2.2 封锁,并发控制的主要技术 封锁(Locking)

10、时标(Timestamp,时间戳) 商用的DBMS一般都采用封锁方法,10.2.2 封锁,1. 什么是封锁? 封锁就是事务T在对某个数据对象(如表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。 封锁是实现并发控制的一个非常重要的技术。,DBMS通常提供了多种类型的封锁。一个事务对某个数据对象加锁后究竟拥有什么样的控制是由封锁的类型决定的。 基本封锁类型 排它锁(eXclusive lock,简记为X锁) 共享锁(Share lock,简记为S锁),10.2.2 封锁,排它锁(又称写锁,简称X锁)

11、若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。,共享锁(又称读锁,简称S锁) 若事务T对数据对象A加上S锁,则其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。,10.2.2 封锁,Y=Yes,相容的请求 N=No,不相容的请求,2. 封锁类型的相容矩阵,T2 T1,在锁的相容矩阵中: 最左边一列表示事务T1已经获得的数据对象上的锁的类型,其中横线表示没有加锁。 最上面一行表示另一事务T2对同一数据对象发出的封锁请求。 T2的封锁请求能否被满足用矩阵中的Y和N表示 Y表示事务T2的封锁要求与T1已持有的锁相容,封锁

12、请求可以满足 N表示T2的封锁请求与T1已持有的锁冲突,T2的请求被拒绝,10.2.2 封锁,3.封锁的粒度,X锁和S锁都是加在某一个数据对象上的; 封锁的对象:逻辑单元,物理单元,封锁对象可以很大也可以很小例: 对整个数据库加锁对某个属性值加锁 封锁对象的大小称为封锁粒度(Granularity)。 多粒度封锁(multiple granularity locking) 在一个系统中同时支持多种封锁粒度供不同的事务选择。,10.2.2 封锁,封锁粒度与系统并发度和并发控制开销密切相关.,选择封锁粒度的原则,封锁的粒度越 大,小, 系统被封锁的对象 并发度 系统开销,少,多,,低,高,,小,大

13、,,注: 需要处理多个关系的大量元组的用户事务:以数据库为封锁粒度; 需要处理大量元组的用户事务:以关系为封锁粒度; 只处理少量元组的用户事务:以元组为封锁粒度。,4. 封锁协议 运用X锁和S锁对数据对象加锁时,需要约定一些规则:封锁协议(Locking Protocol)。 何时申请X锁或S锁; 持锁时间、何时释放 不同的封锁协议,在不同的程度上为并发操作的正确调度提供一定的保证。 常用的封锁协议:三级封锁协议。,10.2.2 封锁,(1)一级封锁协议事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。 正常结束(COMMIT) 非正常结束(ROLLBACK) 一级封锁协议可防止丢失

14、修改,并保证事务T是可恢复的。 在一级封锁协议中,如果是读数据,不需要加锁的,所以它不能保证可重复读和不读“脏”数据。,10.2.2 封锁,10.2.2 封锁,没有丢失修改,事务T1在读A进行修改之前先对A加X锁 当T2再请求对A加X锁时被拒绝 T2只能等待T1释放A上的锁后T2获得对A的X锁 这时T2读到的A已经是T1更新过的值15 T2按此新的A值进行运算,并将结果值A=14送回到磁盘。避免了丢失T1的更新。,例:读“脏”数据,10.2.2 封锁,(2)二级封锁协议事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务T在读取数据R前必须先加S锁,读完后即可释放S锁。 可以防止丢

15、失修改和读“脏”数据。由于读完数据后即可释放S锁,所以它不能保证可重复读。,10.2.2 封锁,10.2.2 封锁,不读“脏”数据,事务T1在对C进行修改之前,先对C加X锁,修改其值后写回磁盘 T2请求在C上加S锁,因T1已在C上加了X锁,T2只能等待 T1因某种原因被撤销,C恢复为原值100 T1释放C上的X锁后T2获得C上的S锁,读C=100。避免了T2读“脏”数据,(3)三级封锁协议事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务T在读取数据R前必须先加S锁,直到事务结束才释放。 可以防止丢失修改和读“脏”数据,还防止了不可重复读。,10.2.2 封锁,10.2.2 封锁

16、,可重复读,事务T1在读A,B之前,先对A,B加S锁 其他事务只能再对A,B加S锁,而不能加X锁,即其他事务只能读A,B,而不能修改 当T2为修改B而申请对B的X锁时被拒绝只能等待T1释放B上的锁 T1为验算再读A,B,这时读出的B仍是100,求和结果仍为150,即可重复读 T1结束才释放A,B上的S锁。T2才获得对B的X锁,三级协议的主要区别:,10.2.2 封锁,10.2.2 封锁,1) 活锁,如何避免活锁先来先服务,当多个事务请求封锁同一数据对象时: 按请求封锁的先后次序对这些事务排队; 该数据对象上的锁一旦释放,首先批准申请队列中第一个事务获得锁。,5.活锁和死锁,10.2.2 封锁,

17、2) 死锁,解决方法,预防死锁 死锁的诊断与解除,10.2.2 封锁,3) 死锁的预防,产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待。 预防死锁的发生就是要破坏产生死锁的条件。 常用方法: 一次封锁法 顺序封锁法,10.2.2 封锁,(1) 一次封锁法,要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。 存在的问题:降低并发度扩大封锁范围; 难以事先精确确定封锁对象,只能将以后可能要用到的数据全部加锁,势必更加扩大封锁范围,从而进一步降低系统的并发度。,10.2.2 封锁,预先对数据对象规定一个封锁顺序,所

18、有事务都按这个顺序实行封锁。 存在的问题:维护成本高;由于事务的封锁请求可以随着事务的执行而动态决定,因此很难按规定顺序施加封锁。,(2) 顺序封锁法,10.2.2 封锁,4) 死锁的诊断与解除(普遍采用),允许死锁发生 解除死锁 由DBMS的并发控制子系统定期检测系统中是否存在死锁; 一旦检测到死锁,就要设法解除。 常用方法: 超时法 事务等待图法,10.2.2 封锁,(1)超时法,如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。 优点:实现简单 缺点: 有可能误判死锁; 时限若设置得太长,死锁发生后不能及时发现。,10.2.2 封锁,(2)等待图法,用事务等待图动态反映所有事务的

19、等待情况: 事务等待图是一个有向图G=(T,U) T为结点的集合:每个结点表示正运行的事务 U为边的集合:每条边表示事务等待的情况 若T1等待T2,则T1,T2之间划一条有向边,从T1指向T2。,10.2.2 封锁,并发控制子系统周期性地检测事务等待图,如果发现图中 存在回路,则表示系统中出现了死锁。,解除死锁:选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有的锁,使其它事务能继续运行下去。,10.2.3 并发操作的调度,由于计算机系统对并发操作的调度是随机的,而且不同的调度可能会产生不同的结果: 一. 什么样的并发操作调度是正确的? 二. 如何保证并发操作调度的正确性?,一.

20、什么样的并发操作调度是正确的?,将所有事务串行起来的调度策略一定是正确的调度策略。 多个事务的并行执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同,这种调度策略称为可串行化的调度。,10.2.3 并发操作的调度,可串行性是并发事务正确性的准则。 一个给定的并发调度,可串行化正确调度,例:现在有两个事务,分别包含下列操作:事务T1:读B;A=B-1;写回A;事务T2:读A;B=A+1;写回B; 假设:A,B的初值均为5。,则:若T1T2,A=4 B=5;若T2T1,A=5 B=6;,10.2.3 并发操作的调度,对这两个事务的不同调度策略: 串行执行 串行调度策略1 串行调

21、度策略2 交错执行 不可串行化的调度 可串行化的调度,串行执行,正确调度,交错执行,错误调度,正确调度,10.2.3 并发操作的调度,提供一定的手段保证调度的可串行化。,二. 如何保证并发操作调度的正确性?,两段锁协议是保证并发调度可串行性的封锁协议。要求:每个事务分两个阶段进行数据的加锁和解锁.加锁阶段:每个事务开始运行后即进入加锁阶段,申请获得所需要的所有锁。(不能释放锁,又称为扩展阶段),解锁阶段:当一个事务第一次释放锁时,该事务进入解锁阶段。(不能再申请任何锁,又称为收缩阶段),10.2.3 并发操作的调度,例: 事务1的封锁序列:Slock A . Slock B . Xlock C

22、 . Unlock B . Unlock A . Unlock C;事务2的封锁序列:Slock A . Unlock A . Slock B . Xlock C . Unlock C . Unlock B;,事务1遵守两段锁协议,而事务2不遵守两段协议。,10.2.3 并发操作的调度,若并行执行的所有事务均遵守两段锁协议,则对这些事务的所有并行调度策略都是可串行化的。,所有遵守两段锁协议的事务,其并行执行的结果一定是正确的。,注:事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。,10.2.3 并发操作的调度,Slock B 读B=5 Y=B Xlock AA=Y-1 写回A=4

23、Unlock B Unlock A,Slock A等待等待等待等待 Slock A 读A=4 Y=A Xlock B B=Y+1 写回B=5 Unlock B Unlock A,Slock B 读B=5 Y=B Unlock B Xlock AA=Y-1 写回A=4 Unlock A,Slock A 等待 等待 等待 Slock A 读A=4 X=A Unlock A Xlock B B=X+1 写回B=5 Unlock B,(a) 遵守两段锁协议,(b) 不遵守两段锁协议,Slock B 读B=5 Y=B Unlock BXlock A A=Y-1 写回A=4 Unlock A,Slock

24、A 读A=5 X=A Unlock AXlock B 等待 Xlock B B=X+1 写回B=6 Unlock B,(c) 不遵守两段锁协议,T1 T2 T1 T2 T1 T2,10.2.3 并发操作的调度,两段锁协议与防止死锁的一次封锁法: 一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行,因此一次封锁法遵守两段锁协议; 但是两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁。,10.3 数据库的恢复,故障是不可避免的: 计算机硬件故障; 系统软件和应用软件的错误; 操作员的失误; 恶意的破坏。故障的影响: 运行事务非

25、正常中断,影响数据正确性; 破坏数据库,导致部分或全部数据丢失。,10.3.1 存储器的结构,1存储器的类型 从存储器的访问速度、容量和恢复能力角度考察,计算机系统的存储介质可分成三类。 (1)易失性存储器:指内存和Cache。在系统发生故障时,存储的信息会立即丢失。但这一类存储器的访问速度非常快。 (2)非易失性存储器:指磁盘和磁带。在系统发生故障时,存储的信息不会丢失。 (3)稳定存储器:一个理论概念,存储在稳定存储器上的信息是不会丢失的。,2稳定存储器的实现 (1)数据备份将计算机系统中硬盘上的数据通过适当的形式转录到可脱机保存的介质(如磁带、光盘)上,以便需要时再写入到计算机系统中使用

26、。数据库的备份不是简单地做拷贝,它有一套备份和恢复机制。目前采用地备份措施在硬件一级有磁盘镜像、磁盘阵列(RAID)、双机容错等;在软件一级有数据拷贝。(2)数据银行(Data Bank)利用计算机网络把数据传输到远程的计算机存储系统(即“数据银行”)。对数据的写操作,既要写到本地的存储器中,也要写到远程的数据库中,以防止数据的丢失。,10.3.1 存储器的结构,数据在磁盘上以“块”的定长存储单位形式组织。块是内、外存数据交换的基本单位。磁盘中的块称为“物理块”,内存中临时存放物理块内容的块称为“缓冲块”,所有的缓冲块组成了“磁盘缓冲区”。 数据从物理块到缓冲块,称为输入(Input)操作;数

27、据从缓冲块到物理块,称为输出(Output)操作。,Input(A):把物理块A的内容传到内存的缓冲块中。 Output(B):把缓冲块B的内容传送到磁盘中恰当的物理块中。,10.3.1 存储器的结构,3数据访问,read(X):把数据项X的值送到工作区中的局部变量xi。write(X):把局部变量xi的值送到缓冲块中X数据项。,10.3.1 存储器的结构,每个事务Ti有一个专用工作区,存放它访问和修改的数据项值。在事务开始时,产生这个工作区;在事务结束(提交或中止)时,工作区被撤销。事务Ti工作区中数据项X用xi表示。,4. 恢复与原子性的联系,10.3.1 存储器的结构,读B=1000 B

28、=B+1=1100 写B=1100,读A=2000A=A-100=1900写A=1900,A B,系统重新启动时,可能采取下列两种操作之一: (1)重新执行事务,此时将导致数据库中A的值为1800,而不是1900,B的值为1100。 (2)不重新执行事务,此时将导致数据库中A的值为1900,B的值为1000。,这两种操作方式都使系统进入不一致状态,因此都是错误的操作。,10.3.2 恢复的原则和实现方法,恢复操作的基本原则:冗余 利用存储在系统其它地方的冗余数据来重建数据库中已被破坏或不正确的那部分数据。恢复的实现技术:复杂 一个大型数据库产品,恢复子系统的代码要占全部代码的10%以上。,10

29、.3.2 恢复的原则和实现方法,数据库恢复具体实现方法: 1. 转储和建立日志; 数据转储:定期地将整个数据库复制到磁带或另一个磁盘。 登录日志文件:记录事务对数据库的更新操作 2. 数据库恢复 UNDO:数据库未被破坏,但某些数据不可靠,受到怀疑,只要撤销所有不可靠的修改,把数据库恢复到正确的状态。 REDO:数据库已被破坏,数据库已不能用了,装入最近一次拷贝的数据库备份到新的磁盘,然后利用日志库执行“重做”处理,将这两个数据库状态之间的所有更新重做一遍。,10.3.3 故障类型和恢复方法,一. 事务故障,某个事务在运行过程中由于种种原因未运行至正常终点(COMMIT或显示ROLLBACK)

30、就夭折了。 常见原因: 输入数据有误; 运算溢出; 违反了某些完整性限制; 某些应用程序出错; 并行事务发生死锁等。,10.3.3 故障类型和恢复方法,例如: 银行转账事务,这个事务把一笔金额从一个账户甲转给另一个账户乙。BEGIN TRANSACTION读账户甲的余额BALANCE;BALANCE=BALANCE-AMOUNT;(AMOUNT 为转账金额)写回BALANCE;IF(BALANCE 0 ) THEN打印金额不足,不能转账;ROLLBACK;(撤销刚才的修改,恢复事务)ELSE读账户乙的余额BALANCE1;BALANCE1=BALANCE1+AMOUNT;写回BALANCE1;

31、COMMIT;,10.3.3 故障类型和恢复方法,事务内部故障有的是可以通过事务程序本身发现的,但有些是非预期的,则不能由事务程序处理。 发生事务故障时,夭折的事务可能已把对数据库的部分修改写回磁盘。 事务故障的恢复:撤消事务(UNDO) 在不影响其他事务运行情况下,强行回滚该事务,清除该事务对数据库的所有修改,使得这个事务象根本没有启动过一样。,事务故障的恢复由系统自动完成,不需要用户干预。,10.3.3 故障类型和恢复方法,二. 系统故障(软故障),造成系统停止运转的任何事件,使得系统要重新启动。内存中数据库缓冲区的信息将全部丢失,而外部存储设备上的数据不受影响,所有运行事务非正常终止。

32、常见原因: 特定类型的硬件错误(CPU故障); 操作系统故障; DBMS代码错误; 突然停电等。,10.3.3 故障类型和恢复方法,系统故障的恢复: 清除尚未完成的事务对数据库的所有修改:系统重新启动时,让所有非正常终止的事务回滚,强行撤消(UNDO)所有未完成事务;将缓冲区中已完成事务提交的结果写入数据库:系统重新启动时,恢复程序需要重做(REDO)所有已提交的事务,将数据库恢复到一致状态。,10.3.3 故障类型和恢复方法,恢复步骤:,1. 正向扫描日志文件(从前向后) Redo队列: 在故障发生前已经提交的事务 Undo队列: 在故障发生时尚未完成的事务,2. 对Undo队列事务进行UN

33、DO处理反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作,将更新前的值入库。3. 对Redo队列事务进行REDO处理正向扫描日志文件,对每个REDO事务重新执行登记的操作,将更新后的值入库。,10.3.3 故障类型和恢复方法,三. 介质故障(硬故障破坏性最大),指外存故障,使存储在外存中的数据部分丢失或全部丢失,并影响正在存取这部分数据的所有事务。 常见原因: 磁盘损坏; 磁头碰撞; 瞬时强磁干扰等。,(1)重新转储后备副本到新的磁盘,使数据库恢复到最近一次转储时的一致状态。 (2)在日志中找出转储以后所有已提交的事务。 (3)对已提交的事务进行REDO处理,将数据库恢复到故障前某一时

34、刻的一致状态。,10.3.3 故障类型和恢复方法,恢复步骤:,注:介质故障的恢复需要DBA介入,10.4 SQL Server数据库备份与恢复,-要备份的数据库名-右击“任务”单击“备份”,如图:,完整备份 包含数据库中全部数据和日志文件信息,也称为是全库备份或者海量备份。 优点:恢复操作简便,只需要将最近一次的备份恢复。 缺点:完全备份所占的存储空间很大且备份的时间较长。 总:SQL Server将备份过程中发生的任何活动,以及把任何未提交的事务备份到事务日志。恢复备份时,利用备份文件中捕捉到的部分事务日志来确保数据一致性。,10.4.1 数据库备份方法,BACKUP DATABASE da

35、tabase_name TO DISK | TAPE = physical_backup_device_name,例1:在某一个时间点,对数据库Sample做一个完全备份,备份到文件D:backupSample_full.bak:BACKUP DATABASE Sample TO DISK=D:backupSample_full.bak,差异备份 只记录自上次数据库备份后发生更改的数据。 优点:比完整备份小且备份速度快,主要用于使用频繁的系统,可以经常地备份,将减少丢失数据的危险。 总:使用差异数据库备份将数据库还原到差异数据库备份完成时的那一点。若要恢复到精确的故障点,必须使用事务日志备份。

36、,10.4.1 数据库备份方法,BACKUP DATABASE database_name TO DISK | TAPE = physical_backup_device_name WITH DIFFERENTIAL,例2: 若干时间过去了,Sample数据库的内容发生一些变化,需要做一个差异备份: BACKUP DATABASE Sample TO DISK=D:backupSample_1.bak WITH DIFFERENTIAL,10.4.1 数据库备份方法,建议在执行差异数据库备份时使用如下过程: 创建定期的完整数据库备份。 在每个完整数据库备份之间定期创建差异数据库备份。 如果使用

37、完全恢复模型或大容量日志记录恢复模型,则创建事务日志备份的频率比差异数据库备份大。,还原差异数据库备份的顺序为: 还原最新的数据库备份。 还原最后一次的差异数据库备份。 如果使用完全恢复或大容量日志记录恢复,则应用自上次创建差异数据库备份后创建的所有事务日志备份。,日志文件备份 当数据库信息更改时,其更新操作将记入日志文件,将这部分操作信息进行备份。 总:日志备份比完整备份使用的资源少,可以使用事务日志备份将数据库恢复到特定的即时点或恢复到故障点。,10.4.1 数据库备份方法,BACKUP LOG database_name | database_name_var TO DISK | TAP

38、E = physical_backup_device_name,例3:再过了若干时间,下列命令将数据库Sample的日志备份到D:backupSample_log.bak: BACKUP LOG Sample TO DISK=D:backupSample_log.bak,事务日志备份序列独立于数据库备份。可以生成一个事务日志备份序列,然后定期生成用于开始还原操作的数据库备份。,例子:假设有下列事件序列 :,时间 事件 上午 8:00 备份数据库 中午 备份事务日志 下午 04:00:00 备份事务日志 下午 6:00 备份数据库 晚上 08:00:00 备份事务日志 晚上 10:00 出现故障

39、,分析:晚上 8:00 创建的事务日志备份包含从下午 4:00 到晚上 8:00 的事务日志记录,中间跨越下午 6:00 创建数据库备份的时间。事务日志备份序列从上午 8:00 创建的初始数据库备份到晚上 8:00 创建的最后一次事务日志备份是连续的。,10.4.1 数据库备份方法,方案一:使用最后一次创建的数据库备份还原数据库,创建当前活动事务日志的备份。 还原下午 6:00 的数据库备份,然后应用晚上 8:00 的数据库备份和活动事务日志备份。,分析:还原进程检测到晚上 8:00 的事务日志备份包含自上次还原备份后所发生的事务。因此,还原操作向下扫描事务日志直至下午 6:00 完成数据库备

40、份时对应的即时点,并且只前滚事务日志备份内自该点后所完成的事务。对晚上 10:00 的事务日志备份再执行一次上述操作。,10.4.1 数据库备份方法,方案二:使用以前的数据库备份(早于最后一次创建的数据库备份)还原数据库,创建当前活动事务日志的备份。 还原上午 8:00 的数据库备份,然后按顺序还原全部四个事务日志备份。不要还原下午 6:00 的数据库备份。所有完成的事务都将前滚到晚上 10:00。,分析:这个进程所用的时间比还原下午 6:00 的数据库备份要长。 方案二注重由事务日志备份链所提供的冗余安全性,使用这个事务日志备份链,即使数据库备丢失份,也可以还原数据库。可以还原以前的数据库备

41、份,然后还原创建该数据库备份后所创建的所有事务日志备份。,10.4.1 数据库备份方法,该备份哪些数据库,下面的数据库应该定期备份: master model、msdb 所有产品数据库 下列情况下,用户必须备份一个产品数据库: 创建该数据库后 创建索引后 清除事务日志后 执行了一个nonlogged操作之后,10.4.1 数据库备份方法,4.备份前的计划工作 (1)确定备份的频率 (2)确定备份的内容 (3)确定使用的介质 (4)确定备份工作的负责人 (5)确定使用在线备份还是脱机备份 (6)确定是否使用备份服务器 (7)确定备份存储的地方 (8)确定备份存储的期限,10.4.1 数据库备份方

42、法,数据库恢复(还原)就是指加载数据库备份到系统中的进程。,10.4.2 数据库恢复,1.根据数据库完全备份进行恢复任何磁盘故障或磁盘错误引起的数据库混乱或崩溃,都需要利用备份进行恢复,并且首先需要利用数据库完全备份进行恢复,然后再进行增量恢复或日志恢复。RESTORE DATABASE database_name FROM DISK | TAPE = physical_backup_device_name WITH NORECOVERY| RECOVERY ,2.根据差异备份进行恢复如果存在差异备份,则一般需要进行相应的恢复操作。 恢复差异备份的数据库的命令也是RESTORE DATABAS

43、E,但是在根据增量备份之前需注意: (1)已经使用RESTORE DATABASE命令完成了完全备份的恢复,同时指定了NORECOVERY子句; (2)在进行差异备份恢复时需要指定NORECOVERY或RECOVERY; (3)如果有多个差异备份,则一定要按照备份的先后顺序进行恢复。,10.4.2 数据库恢复,3.根据日志文件进行恢复利用日志可以将数据库恢复到最新的一直状态或任意的事务点。利用事务日志进行恢复之前必须注意: (1)在恢复事务日志备份前需首先恢复数据库完全备份或差异备份; (2)如果有多个日志备份,则按先后顺序进行恢复。 RESTORE LOG database_name FRO

44、M DISK | TAPE = physical_backup_device_name WITH NORECOVERY | RECOVERY , STOPAT = date_time | , STOPATMARK = mark_name AFTER datetime | , STOPBEFOREMARK = mark_name AFTER datetime ,10.4.2 数据库恢复,例4: 针对前例中的备份,下面的命令将数据库还原到其在 2011 年 4 月 15 日中午 12 点时的状态。 第一步:还原完全备份的数据库 RESTORE DATABASE Sample FROM DISK=D

45、:backupSample_full.bakWITH NORECOVERY 第二步:还原差异备份的数据库 RESTORE DATABASE Sample FROM DISK=D:backupSample_1.bakWITH NORECOVERY 第三步:还原日志备份,并且只还原到2011年4月 15日中午 12 点时的状态 RESTORE LOG Sample FROM DISK=D:backupSample_log.bak WITH RECOVERY, STOPAT = Apr 15, 2011 12:00 AM,10.4.2 数据库恢复,本章小结,理解事务的概念以及ACID特性; 了解并发操作所带来的数据不一致性以及解决方法; 了解各类封锁协议; 了解各类故障以及恢复方法; 掌握数据库的备份和恢复方法.,

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

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

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


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

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

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