理论课数据库chapter07_第1页
理论课数据库chapter07_第2页
理论课数据库chapter07_第3页
理论课数据库chapter07_第4页
理论课数据库chapter07_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

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

文档简介

1、第七章 故障恢复与事务处理,7.1 事务的基本概念,7.2 数据库恢复的基本技术,7.3 数据库恢复的扩展技术,7.4 事务的并发控制,7.5 数据库事务管理的示例,7.6 小节,1,1、事务(Transaction) 是用户定义的一个数据库操作序列,这些操作要么全部成功完成,要么全部失败。 事务是一个不可分割的基本单位,既是保持数据库完整性约束或逻辑一致性的单位,又是数据库恢复及并发控制的单位。 事务和程序关系: (1)程序是静止的,事务是动态的。事务是程序的执行而不是程序本身。 (2)一个程序可分为多个独立部分同时执行,每一执行则是一个不同的事务,即一个程序中可包含多个事务 事务生成: 可

2、以由用户显式地定义事务的开始与结束 若没有显示定义,则由DBMS按缺省自动划分事务,7.1 事务的基本概念,2,7.1 事务的基本概念,在SQL语言中,定义事务的语句有三条: BEGIN TRANSACTION -事务开始 表示事务从此句开始执行:对数据库的每个操作都包含一个事务的开始,一般可省略 COMMIT -事务提交 表示提交事务的所有操作:当前事务正常执行完,用此语句通知系统,此时将事务中所有对数据库的更新写入磁盘的物理数据库中,事务正常结束。 ROLLBACK -事务回滚 表示当前事务非正常结束,此时系统将事务对数据库的所有已完成的更新操作全部撤销,回滚到事务开始之前的状态 事务的分

3、类: (1)只读型 -由”读”语句组成的事务 SET TRANSACTION READ ONLY (2)读写型 -由”读”和”写”语句组成的事务 SET TRANSACTION READ WRITE,3,7.1 事务的基本概念,2、事务的状态,4,事务开始语句,事务初态,事务执行,事务完成,事务回滚语句,事务提交语句,正常结束,非正常结束,事务的三个阶段,7.1 事务的基本概念,5,7.1 事务的基本概念,3、事务的特性(ACID) 原子性:从终端用户的角度看,事物是不可再分的原子工作。要么全部成功完成,要么全部不完成。 一致性:事务执行的结果必须使数据库从一个一致性状态变到另一个一致性状态。

4、 隔离性:一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。 持续性:一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。,6,7.1 事务的基本概念,一个说明ACID特性的例子 事务:从帐户A转 $50 到帐户B: 1. read(A) 2. A := A 50 3. write(A) 4. read(B) 5. B := B + 50 write(B) Consistency 事务执行完毕后 A 和 B 帐户金额之和必须保持不变。,7,7.1 事务的基本概念,Atomicity 事务在步骤3, step 6之

5、间失败, 系统必须确保此更新没有在系统中没有遗留痕迹,否则将导致不一致。 Durability 一旦用户被告知事务已经完成 (即转帐成功), 则该事务对数据库所做的更新操作必须是永久性的. Isolation 若在步骤3, step 6, 有另外一个事务允许存取被部分更新的数据库, 则它将看到一个不一致的数据库。(即A + B 的和小于它应该有的值). 通过串行地执行事务,可以确保隔离性,但是事务的并发执行可以带来更多的好处.,8,7.1 事务的基本概念,事务的一致性必须建立在用户程序逻辑正确性的基础之上。即:当用户提交事务的时候,必须保证当它运行完毕之际,将数据库保持在一个一致性的状态。 D

6、BMS通过恢复机制来确保事务的原子性和永久性。 隔离性是通过提供一套并发控制的机制而得以实现。,9,4、更新事务的执行与恢复 更新事务的执行要求: 更新事务在活动状态下对数据库的任何修改都不能直接在磁盘中进行,而只能在内存缓冲区中进行。 更新事务的恢复: (1)从活动状态转入失败状态的恢复 (2)从局部提交状态转入失败状态的恢复。,10,7.1 事务的基本概念,7.1 事务的基本概念,5. 事务处理面对的问题和要求。 事务执行期间,数据库可能是不一致的。 事务提交后,数据库必须是一致的。 主要处理两种情况: (1) 多个事务的并发执行:并发控制。 (2) 各类型原因所导致的失败,硬件故障,系统

7、崩溃等:故障恢复。,11,故障种类:事务故障,系统故障,硬件故障 数据库的恢复: 指DBMS必须具有把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)的功能。 数据库恢复原理:冗余 建立冗余数据常用技术: (1) 数据转储 (2) 登记日志文件,12,7.2 数据库恢复的基本技术,一、数据转储 1. 数据转储的概念 转储即DBA定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本或后援副本。,13,7.2 数据库恢复的基本技术,得到 副本,转储,运行事务,数据转储与恢复例,7.2 数据库恢复的基本技术,2、静态转储和动态转储 (1)静态转

8、储:是在系统中无运行事务时进行的转储操作。静态转储得到的一定是一个数据一致性的副本。 (2)动态转储:是指转储期间允许对数据库进行存取或修改。后备副本需配合日志文件。 3、海量转储和增量转储 (1)海量转储:每次转储全部数据库。 (2)增量转储:每次只转储上一次转储后更新过的数据。,14,7.2 数据库恢复的基本技术,二、登记(建立)日志文件 1、日志文件的格式和内容 日志文件用来记录事务对数据库的更新操作的文件。 日志文件主要有两种格式: 以记录为单位 以数据块为单位,15,7.2 数据库恢复的基本技术,(1)以记录为单位的日志文件内容: 事务开始、结束标记 操作对象(表、属性等) 更新前、

9、后值,16,例:日志文件中的一个日志记录例子 事务编号 表 元组标识 属性 更新前 更新后 201 *事务开始 201 库存 k102 在库数量 410 310 201 应收帐 801-2341233 余额 1000 6000 201 *事务提交,7.2 数据库恢复的基本技术,(2)以数据块为单位的日志文件, 事务标识 更新前、后的数据块 由于将更新前的整个块和更新后的整个块都放入日志文件中,操作的类型和操作对象等信息就不必放入日志记录中,17,7.2 数据库恢复的基本技术,2、日志文件的作用 事务故障恢复和系统故障必须用日志文件。 在动态转储方式中必须建立日志文件,后援副本和日志文件综合起来

10、才能有效地恢复数据库。 在静态转储方式中,也可以建立日志文件。,18,7.2 数据库恢复的基本技术,3、登记日志文件 应遵循两条原则: (1)登记的次序严格按并发事务执行的时间次序。 (2)必须先写日志文件,后写数据库。,19,静态转储,运行事务,登记日志文件,为什么要先写日志文件 写数据库和写日志文件是两个不同的操作 在这两个操作之间可能发生故障 如果先写了数据库修改,而在日志文件中没有登记下这个修改,则以后就无法恢复这个修改了 如果先写日志,但没有修改数据库,按日志文件恢复时只不过是多执行一次不必要的UNDO操作,并不会影响数据库的正确性,7.2 数据库恢复的基本技术,20,一、事务故障及

11、恢复 事务故障: 是指事务运行过程中由于种种原因使事务未运行至正常终止点而夭折的情况。如: 运算溢出 死锁而被选中撤销该事务 违反了完整性规则等 事务故障的恢复:恢复程序在不影响其他事务运行的情况下,强行回滚该事务,即撤销该事务已经做出的任何对数据库的修改 事务故障仅影响事务,不影响整个数据库系统,其恢复由恢复子系统自动完成。,21,7.2 数据库恢复的基本技术,7.2 数据库恢复的基本技术,二、系统故障及恢复(软故障) 系统故障:是指造成系统停止运转的任何事件,使得系统要重新启动。 例如,特定类型的硬件错误(CPU故障)、操作系统故障、DBMS代码错误、突然停电等。 系统故障的恢复: 恢复操

12、作: 要撤销故障发生时未完成的事务 重做(REDO)已完成的事务 系统故障的恢复是由系统在重新启动时自动完成的,不需要用户干预。,22,三、介质故障(硬故障) 介质故障:是指外存设备故障。如: 磁盘损坏 磁头碰撞盘面 瞬时强磁场干扰 介质故障的恢复: (1)装入最新的数据库后备副本,使数据库恢复到最近一次转储时的一致性状态。 (2)装入相应的日志文件副本,重做已完成的事务。 介质故障的恢复需要DBA介入。但DBA只需要重装最近转储的数据库副本和有关的各日志文件副本,然后执行系统提供的恢复命令即可,具体的恢复操作仍由DBMS完成。,23,7.2 数据库恢复的基本技术,7.2 数据库恢复的基本技术

13、,四、事务更新与恢复的分类 更新事务的执行与恢复 涉及插入、删除和修改等操作的事务统称为更新事务,DBMS必须保证其原子性和一致性。 所有更新都不是直接在磁盘上进行,而是在内存缓冲区中进行,操作成功后由DBMS统一写回磁盘。 更新事务的恢复: 从活动状态转入失败状态的恢复 从局部提交状态(提交到内存)转入失败状态的恢复,24,7.2 数据库恢复的基本技术,事务更新与恢复的分类 事务更新分为: 延迟更新:到达提交点才真正更新磁盘,此前所有的更新都保存在工作区(缓冲区)中。提交时先记录日志,后写入磁盘 立即更新:到达提交点之前就已经写入磁盘,但每次写磁盘前都已经写了日志 恢复技术: 延迟更新:不需

14、要UNDO,可能需要REDO 立即更新:需要UNDO,也可能需要REDO,25,五、具有检查点的恢复技术 利用日志文件进行数据库恢复时存在的问题: (1)搜索整个日志文件将耗费大量的时间。 (2)很多需要REDO处理的事务实际上已经将它们的 更新操作结果写到数据库中了,然而恢复子系统又重新执 行了这些操作,浪费了大量时间。 解决:使用检查点方法。 当事务T在一个检查点之前提交,T对数据库所做的修改一定都已经写入数据库,这样,在进行恢复处理时,就不必对事务T执行REDO操作,从而改善了恢复效率。,26,7.3 数据库恢复的扩展技术,增加:日志文件中的检查点记录 (检查点建立时所有正在执行的事务清

15、单) ; 一个重新开始文件(存储各检查点记录的地址); 并让恢复子系统在登录日志文件期间动态地维护日志。 检查点记录的内容包括: 建立检查点时刻所有正在执行的事务清单(Ti)。 各事务最近一个日志记录的地址(Di)。,检查点记录,检查点Ci的重新开始记录,27,7.3 数据库恢复的扩展技术,动态维护日志文件的方法是周期性地执行: 建立检查点,保存数据库状态。具体步骤是: 将当前所有日志记录写入磁盘日志文件上; 在日志文件中写入一个检查点记录; 将当前所有数据记录写入磁盘的数据库中; 把检查点记录在日志文件中的地址写入重新开始文件。 恢复系统将根据事务的不同状态采取不同的恢复策略:,在检查点前开

16、始,在 其后且故障点前提交,不重做,28,7.3 数据库恢复的扩展技术,系统使用检查点方法进行恢复的步骤是: 从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录。 由该检查点记录得到检查点建立时刻所有正在执行的事务清单ACTIVE-LIST。 从检查点开始正向扫描日志文件 如有新开始的事务Tj,把Tj暂时放入UNDO-LIST队列; 如有提交的事务Tj,把Tj从UNDO-LIST队列移到REDO-LIST 队列;直到日志文件结束。 对UNDO-LIST中的每个事务 执行UNDO操作,对REDO-LIST 中的每个事务执行REDO操作。,29,7

17、.3 数据库恢复的扩展技术,六、数据库镜像 根据DBA的要求,自动把整个数据库或其中的关键数据复制到另一个磁盘上。DBMS自动保证镜像数据与主数据的一致性。 作用: 一旦出现介质故障,可由镜像磁盘继续提供使用,同时DBMS自动利用镜像磁盘数据进行数据库的恢复,不需要关闭系统和重装数据库副本。,在没有出现故障时,数据库镜像还可以用于并发操作,即当一个用户对数据加排它锁修改数据时,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁。,30,7.3 数据库恢复的扩展技术,数据库镜像,镜像,DB,31,7.3 数据库恢复的扩展技术,7.3 数据库恢复的扩展技术,七、远程备份系统 实际系统可能要应

18、对自然灾害等带来的破坏,解决方法之一就是“远程备份系统” 远程备份系统包括: 一个主站点:执行事务处理 一个或多个远程备份站点:应付突然事件,32,7.3 数据库恢复的扩展技术,主站点和备份站点始终保持同步,且主站点和备份站点分布在不同的地域,这样当主站点遭受灾害时,可以用备份站点顶替主站点。 设计远程备份系统要考虑的问题: 故障检测:如何及时检测到主站点发生故障,建立站点间的独立的通信链路 控制权移交:主站点故障后,备份站点如何成为新的主站点?原主站点恢复后如何取回控制权? 移交控制权给新主站点:原主站点恢复后,从新主站点获取REDO日志,然后通过重做赶上更新,并作为一个辈分站点运行 控制权

19、交还给原主站点:假装新主站点故障,使原主站点重新接管控制权 恢复时间:备份站点应该周期性的处理所接收到的REDO日志,避免接管控制权时花费过多恢复时间 提交时间:为保证事务的更新在备份系统里也是持久的,只有当该事务的日志记录到达备份站点后才能说该事务已提交,这会导致提交时间延长。,33,7.4 事务并发控制,并发操作在多用户共享系统中,多个用户同时存取同一数据的情形称为并发操作。 并发操作的优点: 增加了处理器和磁盘的可用性, 加大事务吞吐量(throughput):一个事务使用CPU时,另外一个事务读写磁盘 降低平均事务响应时间: 短事务不需要等待长事务 并发操作可能带来的问题: (1)破坏

20、数据库的一致性 (2)破坏事务的隔离性,34,并发操作带来的三类数据不一致性: 1. 更新丢失 T1、T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果。,A=16,甲事务,乙事务,A=15,35,7.4.1 三类数据不一致性,2不可重读 T1读数据后,T2执行更新操作,使T1无法再现前一次读取结果。,B=100,甲事务,乙事务,不可重读包括三种情况: (1) 某事务两次读同一数据时,得到的值不同。 (2)某事务再次按相同条件读取数据时,发现记录丢失。 (3)某事务再次按相同条件读取数据时,发现多了记录。,36,7.4.1 三类数据不一致性,3脏读 T1修改数据并写回磁盘,T2读取同一

21、数据后,T1被撤销即数据恢复原值,T2读的数据与DB中的不一致,称“脏”数据。 并发控制方法:封锁,C=100,甲事务,乙事务,C=200,C=100,“脏”数据,37,7.4.1 三类数据不一致性,产生3种错误的原因主要是违反了事务ACID中的4项原则,特别是隔离性原则。因此,必须要有一定的调度手段以保障事务并发执行中一事务执行时不受它事务的影响。,什么是封锁? 封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁 加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。 封锁是实现并发控制的一个非常重要的技术,7.4.

22、2 封锁,38,两种基本的封锁类型 排它锁(X锁或写锁): 若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务不能再对A加任何类型的锁,直到T释放A上的锁。这就保证其他事务在T释放A上的锁之前,不能再读取和修改A。排它锁保护数据对象不被同时读或写。,共享锁(S锁或读锁): 若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A;其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证其他事务可以读A,但在T释放A上的S锁之前,不能对A做任何修改。共享锁保护数据对象不被写,但可以同时读。,数据 对象A,事务T,T可读、不可改A,数据 对象A,事务T,T可读、修改

23、A,39,7.4.2 封锁,封锁协议: 何时申请锁 持锁时间 何时释放,7.4.2 封锁,一级封锁:没有丢失修改数据,不保证“不可重复读”及“脏读”,40,对数据修改之前要加X锁,直到事务结束才释放 如果不修改数据,可以不用加锁,7.4.2 封锁,二级封锁:读脏数据,41,在一级封锁基础上,对数据操作前先加上S锁,读完后立即释放,事务1在对A修改之前先加X锁,修改后写回磁盘,事务2请求数据A,首先请求在A上加S锁。因为事务1加了X锁,事务2只能等待事务1释放X锁,当事务1由于某种原因回滚A=16,释放X锁后,事务2获取S锁,读取A=16,避免了脏读。,7.4.2 封锁,三级封锁:可重读,42,

24、在一级封锁基础上,对数据操作前先加上S锁,事务结束后才释放,事务1在读取A,B之前,先对A,B加S锁,这样当其它事务只能对A,B加S锁,而不能加X锁,因此其它事务只能查询而不能修改A,B。所以当事务2修改B申请为其加X锁时被拒绝,只能等待事务1释放S锁。由于事务1没有结束因此S锁被占 用,事务2等待,此时当事务1再次校验B时,读取B=100,避免了不可重复读。,活锁:使某个事务永远处于等待状态,而得不到执行的现象称为活锁。,等待,数据 R,避免活锁的方法:先来先服务。,43,7.4.3 活锁与死锁,死锁:两个或多个事务都已封锁了一些数据对象,然后又都请求对已被其他事务封锁的数据对象加锁,从而出

25、现死等待,数据 R1,数据 R2,请求加锁,44,7.4.3 活锁与死锁,1、死锁的预防 (OS中预防死锁的方法) (1)一次加锁法 要求每个事务必须一次将所要使用的数据全部加锁。 一次封锁法存在的问题: 降低并发度。因为将以后可能要用到的全部数据加锁,势必将扩大封锁的范围,延长封锁的时间,从而降低了系统的并发度。,45,7.4.3 活锁与死锁,7.4.3 活锁与死锁,(2)顺序封锁法 预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。 顺序封锁法存在的问题: 维护成本高:数据库系统中可封锁的数据对象极其众多,并且随数据的插入、删除等操作而不断地变化,要维护这样极多而且变化的资源的

26、封锁顺序非常困难,成本很高 难于实现:事务的封锁请求可以随着事务的执行而动态地决定,很难事先确定每一个事务要封锁哪些对象,因此也就很难按规定的顺序去施加封锁。 例:规定数据对象的封锁顺序为A,B,C,D,E。事务T3起初要求封锁数据对象B,C,E,但当它封锁了B,C后,才发现还需要封锁A,这样就破坏了封锁顺序.,46,7.4.3 活锁与死锁,关于死锁预防的结论 在操作系统中广为采用的预防死锁的策略并不很适合数据库的特点 DBMS在解决死锁的问题上更普遍采用的是诊断并解除死锁的方法:允许死锁发生,由DBMS的并发控制子系统定期检测系统中是否存在死锁,一旦检测到死锁,再设法解除。,47,2、死锁的

27、诊断 (1)超时法 事务等待时间超过规定时限,就认为发生了死锁。时限长短。该法实现简单,但有可能因其他原因超时而误判死锁;若时限设置过长,发生死锁后不能及时发现。 (2)等待图法 事务等待图是一个有向图G=(T,U)。T为节点的集合,每个节点表示正在运行的事务;U为边的集合,每条边表示事务等待的情况。若T1等待T2,则T1、T2之间画一条有向边,从T1指向T2.事务等待图动态的反映了所有事务的等待情况。并发控制子系统周期性的检查事务等待图,若图中存在回路,则表示系统中出现了死锁。 3、死锁的解除 选择一个处理代价最小的事务,将其撤消,释放此事务持有的所有锁。,48,7.4.3 活锁与死锁,7.

28、4.4 并发调度的可串行化,封锁是并发控制的一项重要技术,但如下问题尚未得到回答: 1. 什么样的并发调度是正确的? 2. 如何保证并发调度是正确的?,49,事务执行方式: (1)串行执行 以事务为单位,多个事务依次顺序执行。能保证事务的正确执行。 (2)并行执行, 以事务为单位,多个事务按一定的调度策略同时执行,不能保证事务正确性。 (3)并发执行的可串行化 需要一种技术,使得在并发执行时像串行执行时一样,这种执行称为并发事务的可串行化。采用的技术则称为并发控制技术。 调度:并发事务的执行次序 服从的约束:调度S中事务Ti操作的执行顺序,必须与单个Ti执行时操作的执行顺序相同;调度S中其他事

29、务Tj的操作可以与Ti的操作交错执行。,50,7.4.4 并发调度的可串行化,操作冲突:当某个调度中的两个操作同时满足以下3个条件,就说这两个操作是冲突的: 他们属于不同事务 他们访问同一个数据项 两个操作中至少有一个是写操作 可串行化的调度: 如果调度S中的每个事务T的操作在调度中都是连续执行的,那么就称调度S是串行的;否则,调度S就是非串行的。 在串行调度中,一个时刻只有一个事务处于活跃状态 串行调度不会发生不同事务操作的交错,保障了事务处理的正确性 但串行调度限制了事务的并发或操作的交错,降低了CPU的吞吐率。因此,实际应用中尽量避免使用。 多个事务的并发执行是正确的,当且仅当其结果与按

30、某一次序串行地执行它们时的结果相同,则称这种调度策略为可串行化的调度。 一个给定的并发调度,当且仅当它是可串行化的,才认为是正确的调度。,51,7.4.4 并发调度的可串行化,例:表6.3的串行调度(T1T2) p197-198 执行结果:A=9000,B=31000; 例:表6.4的串行调度(T2T1) 执行结果:A=8000,B=32000; 例:表6.5 并行调度 执行结果:A=9000,B=31000; 与表6.3的串行调度结果相同,为可串行化调度。 例:表6.6 并行调度 执行结果:A=10000,B=22000; 与表6.3、6.4的串行调度结果都不同,为不可串行化调度。 注意:

31、(1)一组事务并发调度的正确性准则:可串行化调度。 (2)一组事务的可串行化调度不惟一。,52,7.4.4 并发调度的可串行化,7.4.4 并发调度的可串行化,保证并发操作调度正确性的方法 封锁方法:两段锁(Two-Phase Locking,简称2PL)协议 时间戳协议:事先选定事务的次序,基于系统赋予每个事务唯一的时间戳来进行调度,53,两段锁协议:指所有事务必须分两个阶段对数据项加锁和解锁。 获得封锁:对任何数据进行读、写操作之前,要申请并获得对该数据的封锁; 释放封锁:当事务释放了一个封锁以后,事务进入解锁阶段,在该阶段只能进行解锁操作不能再进行加锁操作。 例如:事务T遵守两段锁协议,

32、其封锁序列是; Slock A Slock B Xlock C Unlock B Unlock A Unlock C |,54,7.4.4 并发调度的可串行化,7.4.4 并发调度的可串行化,例: 事务1的封锁序列: Slock A . Slock B . Xlock C . Unlock B . Unlock A . Unlock C; 事务2的封锁序列: Slock A . Unlock A . Slock B . Xlock C . Unlock C . Unlock B; 事务1遵守两段锁协议,而事务2不遵守两段协议。,55,7.4.4 并发调度的可串行化,可以证明:若并行执行的所有事

33、务均遵守两段锁协议,则对这些事务的所有并行调度策略都是可串行化的。 所有遵守两段锁协议的事务,其并行执行的结果一定是正确的 事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件 可串行化的调度中,不一定所有事务都必须符合两段锁协议。,56,7.4.4 并发调度的可串行化,两段锁协议与防止死锁的一次封锁法的差别 一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行,因此一次封锁法遵守两段锁协议 但是两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁,57,7.4.4 并发调度的可串行化,两段锁协议与三级封锁协议 两类不同目

34、的的协议 两段锁协议 保证并发调度的正确性 三级封锁协议 在不同程度上保证数据一致性(不可重读、脏数据、更新丢失) 遵守第三级封锁协议必然遵守两段协议,58,封锁粒度:封锁对象的大小。 封锁对象:属性、元组、关系、数据库 封锁粒度与系统的并发度和并发控制的开销密切相关: 封锁的粒度越大,并发度越小,系统开销越小; 封锁的粒度越小,并发度越高,系统开销越大。 多粒度封锁:一个系统中同时支持多种封锁粒度供不同事务选择的封锁方法。 封锁粒度选择原则: (1)需处理大量元组的事务以关系为封锁粒度。 (2)需处理多个关系的大量元组的事务以数据库为封锁粒度。 (3)处理少量元组的事务以元组为封锁粒度。,5

35、9,7.4.5 封锁的粒度,一、多粒度封锁 1. 定义多粒度树 四级粒度树,列 列 列 列 ,60,7.4.5 封锁的粒度,2. 多粒度树封锁协议 可对多粒度树中的每个结点独立加锁。(注意:自动对其所有后裔结点加同类型的锁。) 多粒度封锁方式:显式封锁和隐式封锁。,显式封锁是应事务的要求直接加到数据对象上的封锁; 隐式封锁是该数据对象没有独立加锁,是由于其上级结点加锁而使该数据对象加上了锁。,数据库,关系R1 关系Rn,元组 元组 元组 元组,列 列 列 列 ,61,7.4.5 封锁的粒度,封锁冲突检查: (1)与显示封锁冲突(本结点) (2)显示封锁与隐式封锁的冲突(与上层结点、与下层结点)

36、,问题?,检查效率低。,解决?,引进意向锁。,62,7.4.5 封锁的粒度,二 、 意向锁 意向锁加锁原则:如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁;对任一结点加锁时,必须先对它的上层结点加意向锁。 例如:对任一元组加锁时,必须先对它所在的关系加意向锁。 封锁冲突的检查:本结点、上层结点(不必检查下层结点) 三种常用的意向锁: 1意向共享锁(IS锁) 若对一个数据对象加IS锁,表示它的后裔结点拟加S锁。,63,7.4.5 封锁的粒度,例如:要对某个元组加S锁,则要先对关系和数据库加IS锁。 2意向排它锁(IX锁) 若对一个数据对象加锁,表示它的后裔结点拟加X锁。 3共享意向排它

37、锁(SIX锁) 若对一个数据对象加SIX锁,表示对它加S锁,再加IX锁,即SIX=S+IX。,64,7.4.5 封锁的粒度,7.4.5 封锁的粒度,数据锁的相容矩阵,65,只有相互之间兼容的锁才能同时加在相同的资源上,7.5 数据库事务管理的示例,1、SQL对事务管理的支持 事务相关语句: COMMIT、ROLLBACK、START TRANSACTION、SET TRANSACTION、SAVEPOINT、RELEASE SAVEPOINT等 (1)COMMIT用于事务的提交,即把所有更改的数据保存到物理数据库中,并结束事务。,66,7.5 数据库事务管理的示例,(2)SAVEPOINT用于在事

温馨提示

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

评论

0/150

提交评论