数据库ppt课件08章数据恢复技术和并发控制.ppt

上传人:小飞机 文档编号:2157243 上传时间:2023-01-21 格式:PPT 页数:105 大小:464KB
返回 下载 相关 举报
数据库ppt课件08章数据恢复技术和并发控制.ppt_第1页
第1页 / 共105页
数据库ppt课件08章数据恢复技术和并发控制.ppt_第2页
第2页 / 共105页
数据库ppt课件08章数据恢复技术和并发控制.ppt_第3页
第3页 / 共105页
数据库ppt课件08章数据恢复技术和并发控制.ppt_第4页
第4页 / 共105页
数据库ppt课件08章数据恢复技术和并发控制.ppt_第5页
第5页 / 共105页
点击查看更多>>
资源描述

《数据库ppt课件08章数据恢复技术和并发控制.ppt》由会员分享,可在线阅读,更多相关《数据库ppt课件08章数据恢复技术和并发控制.ppt(105页珍藏版)》请在三一办公上搜索。

1、第8章 数据库恢复和并发控制,本章要点,事务的基本概念数据库恢复恢复的定义、原则和方法故障的种类及恢复方法具有检查点的恢复技术数据库镜像并发控制并发操作带来的数据不一致性封锁活锁和死锁并发调度的可串行性两段锁协议封锁的粒度,8.1 事务,8.1.1 事务的基本概念,所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。事务开始与结束可以由用户显式控制。如果没有显式定义事务,则由DBMS按缺省规定自动划分事务。,在SQL中,定义事务的语句有三条:BEGIN TRANSACTIONCOMMIT(提交将事务中所有对数据库的更新写回到磁盘上的物理数据库中。)RO

2、LLBACK(回滚,在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤消,回滚到事务开始时的状态。),示例,银行转帐:从A帐户过户1000¥到B帐户read(A);A:=A 1000;write(A);read(B);B:=B+1000;write(B);read(X):从数据库传送数据项X到事务的工作区中write(X):从事务的工作区中将数据项X写回数据库,8.1.2 事务的性质,原子性(Atomicity)事务中包含的所有操作要么全做,要么全不做原子性由恢复机制实现一致性(Consistency)事务开始前,数据库处于一致性的状态;事务结束后

3、,数据库必须仍处于一致性状态事务的隔离执行必须保证数据库的一致性,隔离性(Isolation)系统必须保证事务不受其它并发执行事务的影响一个事务内部的操作及使用的数据对其他并发事务是隔离的持续性(Durability)一个事务一旦提交之后,它对数据库的影响必须是永久的系统发生故障不能改变事务的持久性,ACID特性可能遭到破坏的因素,多个事务并行运行时,不同事务的操作交叉执行事务在运行过程中被强行停止,8.2 数据库恢复技术,故障是不可避免的计算机硬件故障系统软件和应用软件的错误操作员的失误恶意的破坏故障的影响运行事务非正常中断破坏数据库,数据库管理系统对故障的对策,DBMS提供恢复子系统保证故

4、障发生后,能把数据库中的数据从错误状态恢复到某种逻辑一致的状态保证事务ACID恢复技术是衡量系统优劣的重要指标,8.2.1 故障的种类,1.事务故障,事务故障是某个事务在运行过程中由于种种原因未运行至正常终点就终止了。常见原因运算溢出、并发事务发生死锁、违反完整性限制恢复方法DBMS的恢复子系统要在不影响其他事务运行的情况下,强行回滚(ROLLBACK)该事务。这类恢复操作称为事务撤消(UNDO)。,2.系统故障,指造成系统停止运转的任何事件,使得系统要重新启动。整个系统的正常运行突然被破坏所有正在运行的事务都非正常终止内存中数据库缓冲区的信息全部丢失外部存储设备上的数据未受影响,系统故障的常

5、见原因,操作系统或DBMS代码错误操作员操作失误特定类型的硬件错误(如CPU故障)突然停电,恢复方法:,系统故障的恢复是由系统在重新启动时自动完成的,不需要用户干预。恢复子系统必须在系统重新启动时,让所有非正常终止的事务回滚,强行撤销所有未完成事务。(undo)对已完成的事务可能有一部分甚至全部留在缓冲区,尚未写回到磁盘上的物理数据库中,应将这些已提交的结果重新写到数据库。恢复子系统除需要撤消所有未完成事务外,还需重做(redo)所有已提交的事务,3.介质故障,硬件故障使存储在外存中的数据部分丢失或全部丢失介质故障比前两类故障的可能性小得多,但破坏性大得多,介质故障的常见原因,硬件故障磁盘损坏

6、磁头碰撞操作系统的某种潜在错误瞬时强磁场干扰,介质故障的恢复,装入数据库发生介质故障前某个时刻的数据副本装入相应的日志文件副本,重做自此时始的所有成功事务,将这些事务已提交的结果重新记入数据库,4.计算机病毒和人为破坏,计算机病毒是一种人为的故障或破坏。由于用户有意或无意的操作也可能删除数据库中的有用的数据或加入错误的数据,这同样会造成一些潜在的故障。,8.2.2 恢复的实现技术,故障对数据库的影响,数据本身被破坏;数据库没有被破坏,但数据可能不正确,这是由于事务的运行被非正常终止造成的。,恢复操作的基本原理,恢复操作的基本原理:冗余利用存储在系统其它地方的冗余数据来重建数据库中已被破坏或不正

7、确的那部分数据恢复的实现技术复杂一个大型数据库产品,恢复子系统的代码要占全部代码的10%以上,恢复机制涉及的关键问题,如何建立冗余数据数据转储(backup)登录日志文件(logging)如何利用这些冗余数据实施数据库恢复,分类,定义:所谓转储 即DBA周期性地将整个数据库复制到另一个介质上保存起来的过程。这些备用的数据文本称为后备副本或后援副本。,1.数据转储,静态转储,在系统中无运行事务时进行的转储操作。即转储操作开始的时刻,数据库处于一致性状态,而转储期间不允许(或不存在)对数据库的任何存取、修改活动。,动态转储,是指转储期间允许对数据库进行存取或修改。即转储和用户事务可以并发执行。,海

8、量转储与增量转储,海量转储:每次转储全部数据库增量转储:只转储上次转储后更新过的数据,2.登记日志文件,一、日志文件的内容二、日志文件的作用三、登记日志文件的原则,日志文件的内容,日志文件是用来记录事务对数据库的更新操作的文件。格式以记录为单位以数据块为单位,日志文件的作用,进行事务故障和系统故障恢复动态转储方式中的数据库恢复静态转储方式中,协助后备副本进行故障恢复,登记日志文件的原则,登记的次序严格按并行事务执行的时间次序必须先写日志文件,后写数据库写日志文件操作:把表示这个修改的日志记录 写到日志文件写数据库操作:把对数据的修改写到数据库中,8.2.3 故障恢复的策略,1 事务故障的恢复,

9、(1)反向扫描文件日志,即从最后向前扫描日志文件,查找该事务的更新操作。(2)对该事务的更新操作执行逆操作,即将日志记录中“更新前的值”写入数据库。对于插入操作,由于“更新前的值”为空,则相当于做删除操作;对于删除操作,由于“更新后的值”为空,则相当于做插入操作;若是修改操作,则用“更新前的值”代替“更新后的值”。(3)继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。(4)依次类推,直至读到此事务的开始标记,事务故障恢复就完成了。,2 系统故障的恢复,系统故障造成数据库不一致状态的原因一些未完成事务对数据库的更新已写入数据库一些已提交事务对数据库的更新还留在缓冲区没来得及写入数据

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

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

12、重做处理。即将日志记录中“更新后的值”写入数据库。,4.具有检查点的恢复技术,恢复时的问题:搜索整个日志将耗费大量的时间很多需要REDO处理的事务实际上已经将它们的更新操作结果写到数据库中了,然而恢复子系统又重新执行了这些操作,浪费了大量时间解决办法:DBMS定时设置检查点在检查点时刻才真正做到把对DB的修改写到磁盘。当DB需要恢复时,只有检查点后面的事务需要恢复。,具有检查点的恢复技术的实现,在日志文件中增加一类新的记录 检查点记录,内容包括:建立检查点时刻所有正在执行的事务清单。这些事务最近一个日志记录的地址。增加一个重新开始文件内容:记录各个检查点记录在日志文件中的地址,让恢复子系统在登

13、录日志文件期间动态地维护日志具体步骤是:将当前日志缓冲中的所有日志记录写入磁盘的日志文件上;在日志文件中写入一个检查点记录;将当前数据缓冲的所有数据记录写入磁盘的数据库中;把检查点记录在日志文件中的地址写入一个重新开始文件。,不要REDO,Tc(检查点),Tf(系统故障),1,2,3,4,5,REDO,撤消,REDO,撤消,恢复策略,检查点方法的恢复算法,(1)从重新开始文件找到最后一个检查点记录在日志文件中的地址,由此找到日志文件中最后一个检查点记录。(2)由该检查点记录得到所有在检查点建立时正在执行的事务清单,将这些事务暂时放入UNDO队列。新建REDO队列并使其暂为空。(3)从检查点开始

14、正向扫描日志文件,如有新开始的事务Ti,把Ti暂时放入UNDO队列;如有提交的事务Tj,把Tj从UNDO队列移到REDO队列;直到日志文件结束。(4)对UNDO队列中的每个事务执行UNDO操作,对REDO队列中的每个事务执行REDO操作。,5.数据库镜像,介质故障是对系统影响最为严重的一种故障,严重影响数据库的可用性介质故障恢复比较费时为预防介质故障,DBA必须周期性地转储数据库提高数据库可用性的解决方案数据库镜像(Mirror),DBMS自动把整个数据库或其中的关键数据复制到另一个磁盘上DBMS自动保证镜像数据与主数据的一致性,数据库镜像的用途,没有出现故障时可用于并发操作一个用户对数据加排

15、他锁修改数据时,其他用户可以读镜像数据库上的数据出现介质故障时DBMS自动利用镜像磁盘数据进行数据库的恢复,不需要关闭系统和重装数据库副本,update,update,update,read,read,read,没有出现故障时,update,update,update,read,read,read,恢复,出现介质故障时,8.2.4 SQL Server的数据库恢复技术,1.数据转储策略,只备份数据库同时备份数据库和事务日志,2.数据转储和恢复的SQL语句,数据转储BACKUP DATABASE|LOG database_name|database_name_varTO,.nWITH DIFFE

16、RENTIAN,数据恢复RESTORE DATABASE database_name|database_name_var FROM,.n WITH REPLACE,3.SQL Server的检查点,SQL Server支持具有检查点的恢复技术。SQL Server提供有两种方法建立检查点:由SQL Server自动执行的检查点由数据库所有者或DBA调用CHECKPOINT命令强制执行的检查点。,8.3 并发控制,多事务执行方式,(1)事务串行执行(serial access)每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行不能充分利用系统资源,发挥数据库共享资源的特点,(2)

17、交叉并发方式(interleaved concurrency)事务的并行执行是这些并行事务的并行操作轮流交叉运行是单处理机系统中的并发方式,能够减少处理机的空闲时间,提高系统的效率,T1 T2 T3,(3)同时并发方式(simultaneous concurrency)多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行最理想的并发方式,但受制于硬件环境,T1 T2 T3,8.3.1 并发操作带来的问题,可能会存取和存储不正确的数据,破坏事务的隔离性和数据库的一致性并发控制机制的任务对并发操作进行正确调度保证事务的隔离性和一致性保证数据库的一致

18、性,并发操作带来的数据不一致性,丢失修改(lost update)不可重复读(non-repeatable read)读“脏”数据(dirty read),1.丢失修改,2.不可重复读,三类不可重复读,事务1读取某一数据后:1.事务2对其做了修改,当事务1再次读该数据时,得到与前一次不同的值。2.事务2删除了其中部分记录,当事务1再次读取数据时,发现某些记录神秘地消失了。3.事务2插入了一些记录,当事务1再次按相同条件读取数据时,发现多了一些记录。后两种不可重复读有时也称为幻影现象(phantom row),3.读“脏”数据,三种数据不一致产生的主要原因:并发操作破坏了事务的隔离性并发控制就是

19、要用正确的方式调度并发操作,使一个事务的执行不受其他事务的干扰,从而避免造成数据的不一致性,保证事务的隔离性。并发控制主要技术:封锁,8.3.2 封锁,1.封锁的概念,封锁就是事务T在对某个数据对象操作之前,先向系统发出请求,对其加锁。在事务T释放它的锁之前,其他的事务不能更新此数据对象。,基本封锁类型,排它锁又称为写锁(Exclusive lock,简记为X锁)若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。共享锁又称为读锁(Share lock,简记为S锁)若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其它事务

20、只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。,2.封锁协议,一级封锁协议事务在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。一级封锁协议可以防止丢失修改,并保证事务T是可恢复的。在一级封锁协议中,如果仅仅是读数据不对其修改,是不需要加锁的,所以它不能保证可重复读和不读“脏数据”。,2.封锁协议,二级封锁协议在一级封锁协议的基础上,加上事务T在读数据R之前必须先对其加S锁,读完后即可释放S锁。二级封锁协议除了防止丢失修改,还可以进一步防止读“脏数据”。在二级封锁协议中,由于事务T读完了数据后即可释放S锁,所以不

21、能保证可重复读。,2.封锁协议,三级封锁协议在一级封锁协议的基础上,加上事务T在读数据R之前必须先对其加S锁,直到事务结束时释放S锁。三级封锁协议除了防止了丢失修改和不读“脏”数据外,还进一步防止了不可重复读。,3.活锁和死锁,活锁,定义:指某个事务由于请求封锁但总也得不到锁而处于长时间的等待状态。,死锁,T1 T2,获得 Xlock R1.申请 Xlock R2等待等待等待.,.获得 Xlock R2.申请 Xlock R1等待等待.,在同时处于等待状态的两个或多个事务中,每个事务封锁一部分数据资源,同时等待其他事务释放数据资源。,解决死锁的方法,两类方法采取一定措施来预防死锁的发生采用一定

22、手段定期诊断系统中有无死锁,若有则解除之,死锁的预防,产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待。预防死锁的发生就是要破坏产生死锁的条件。预防死锁的方法 一次封锁法 顺序封锁法,死锁的诊断与解除,允许死锁发生解除死锁由DBMS的并发控制子系统定期检测系统中是否存在死锁一旦检测到死锁,就要设法解除,DBMS对并发事务不同的调度可能会产生不同的结果什么样的调度是正确的?,8.3.3 并发调度的可串行性,可串行化(Serializable)调度多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同,

23、称这种调度策略为可串行化的调度可串行性(Serializability)是并发事务正确调度的准则一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度,8.3.4 两段锁协议,两段锁协议的内容1.在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁2.在释放一个封锁之后,事务不再获得任何其他封锁。“两段”锁的含义事务分为两个阶段 第一阶段是获得封锁,也称为扩展阶段;第二阶段是释放封锁,也称为收缩阶段。,例:事务1的封锁序列:Slock(A)Slock(B)Xlock(C)Unlock(A)Unlock(C)Unlock(B)事务2的封锁序列:Slock(A)Unlock(A)Sl

24、ock(B)Xlock(C)Unlock(C)Unlock(B)事务1遵守两段锁协议,而事务2不遵守两段协议。,并行执行的所有事务均遵守两段锁协议,则对这些事务的所有并行调度策略都是可串行化的。所有遵守两段锁协议的事务,其并行执行的结果一定是正确的事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件可串行化的调度中,不一定所有事务都必须符合两段锁协议。,两段锁协议与防止死锁的一次封锁法一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行,因此一次封锁法遵守两段锁协议但是两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁,

25、遵守两段锁协议的事务发生死锁,T1Slock B读B=2Xlock A等待等待,T2Slock A读A=2Xlock B等待,8.3.5 封锁的粒度,X锁和S锁都是加在某一个数据对象上的封锁的对象:逻辑单元,物理单元 例:在关系数据库中,封锁对象:逻辑单元:属性值、属性值集合、元组、关系、索引项、整个索引、整个数据库等物理单元:页(数据页或索引页)、物理记录等,封锁对象可以很大也可以很小 例:对整个数据库加锁 对某个属性值加锁封锁对象的大小称为封锁的粒度(Granularity),选择封锁粒度原则,封锁粒度与系统的并发度和并发控制的开销密切相关。封锁的粒度越大,数据库所能够封锁的数据单元就越少

26、,并发度就越小,系统开销也越小;封锁的粒度越小,并发度较高,但系统开销也就越大,1.多粒度封锁和多粒度树,多粒度封锁(Multiple Granularity Locking)在一个系统中同时支持多种封锁粒度供不同的事务选择同时考虑封锁开销和并发度两个因素,适当选择封锁粒度需要处理多个关系的大量元组的用户事务:以数据库为封锁单位需要处理大量元组的用户事务:以关系为封锁单元只处理少量元组的用户事务:以元组为封锁单位,多粒度树以树形结构来表示多级封锁粒度根结点是整个数据库,表示最大的数据粒度叶结点表示最小的数据粒度,例:四级粒度树。根结点为数据库,数据库的子结点为关系,关系的子结点为元组。,多粒度

27、封锁协议,允许多粒度树中的每个结点被独立地加锁对一个结点加锁意味着这个结点的所有后裔结点也被加以同样类型的锁在多粒度封锁中一个数据对象可能以两种方式封锁:显式封锁和隐式封锁显式封锁:直接加到数据对象上的封锁隐式封锁:由于其上级结点加锁而使该数据对象加上了锁,对某个数据对象加锁时系统检查的内容,该数据对象有无显式封锁与之冲突 所有上级结点检查本事务的显式封锁是否与该数据对象上的隐式封锁冲突:(由上级结点封锁造成的)所有下级结点看上面的显式封锁是否与本事务的隐式封锁(将加到下级结点的封锁)冲突。,2 意向锁,引进意向锁(intention lock)目的提高对某个数据对象加锁时系统的检查效率对任一

28、结点加基本锁,必须先对它的上层结点加意向锁如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁,例:对任一元组 r 加锁,先对关系R加意向锁 事务T要对关系R加X锁,系统只要检查根结点数据库和关系R是否已加了不相容的锁,不需要搜索和检查R中的每一个元组是否加了X锁,常用意向锁,意向共享锁(Intent Share Lock,简称IS锁)意向排它锁(Intent Exclusive Lock,简称IX锁)共享意向排它锁(Share Intent Exclusive Lock,简称SIX锁),IS锁,如果对一个数据对象加IS锁,表示它的后裔结点拟(意向)加S锁。例:要对某个元组加S锁,则要首先

29、对关系和数据库加IS锁,IX锁,如果对一个数据对象加IX锁,表示它的后裔结点拟(意向)加X锁。例:要对某个元组加X锁,则要首先对关系和数据库加IX锁。,SIX锁,如果对一个数据对象加SIX锁,表示对它加S锁,再加IX锁,即SIX=S+IX。例:对某个表加SIX锁,则表示该事务要读整个表(所以要对该表加S锁),同时会更新个别元组(所以要对该表加IX锁)。,锁的强度锁的强度是指它对其他锁的排斥程度一个事务在申请封锁时以强锁代替弱锁是安全的,反之则不然,具有意向锁的多粒度封锁方法申请封锁时应该按自上而下的次序进行;释放封锁时则应该按自下而上的次序进行 例:事务T要对一个数据对象加锁,必须先对它的上层

30、结点加意向锁,8.4 小结,如果数据库只包含成功事务提交的结果,就说数据库处于一致性状态。保证数据一致性是对数据库的最基本的要求。事务是数据库的逻辑工作单位DBMS保证系统中一切事务的原子性、一致性、隔离性和持续性,恢复中最经常使用的技术:数据库转储和登记日志文件恢复的基本原理:利用存储在后备副本、日志文件和数据库镜像中的冗余数据来重建数据库提高恢复效率的技术检查点技术可以提高系统故障的恢复效率可以在一定程度上提高利用动态转储备份进行介质故障恢复的效率镜像技术镜像技术可以改善介质故障的恢复效率,数据库的并发控制以事务为单位数据库的并发控制通常使用封锁机制两类最常用的封锁活锁和死锁并发控制机制调度并发事务操作是否正确的判别准则是可串行性并发操作的正确性则通常由两段锁协议来保证。两段锁协议是可串行化调度的充分条件,但不是必要条件,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号