




已阅读5页,还剩58页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八章 故障恢复与事务处理,本章小结,8.1 事务的基本概念,8.2 数据库恢复概述,8.3 恢复的实现技术,8.4 故障恢复,8.5 事务并发控制,8.6 封锁的粒度,第八章 事务管理,8.1 事务的基本概念 1、事务(Transaction) 是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。 事务和程序关系: (1)程序是静止的,事务是动态的。事务是程序的执行而不是程序本身。 (2)一个程序可分为多个独立部分同时执行,每一执行则是一个不同的事务,即一个程序中可包含多个事务 事务生成: 用户显式地定义事务 由DBMS按缺省自动划分事务,8.1 事务的基本概念,在SQL语言中,定义事务的语句有三条: BEGIN TRANSACTION 事务开始 COMMIT -事务提交 ROLLBACK -事务回滚 事务的分类: (1)只读型 SET TRANSACTION READ ONLY (2)读写型 SET TRANSACTION READ WRITE,8.1 事务的基本概念,2、事务的特性(ACID) 原子性:要么全做,要么全不做。 一致性:事务执行的结果必须使数据库从一个一致性状态变到另一个一致性状态。 隔离性:一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。 持续性:一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。,8.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 帐户金额之和必须保持不变。,8.1 事务的基本概念,Atomicity 事务在步骤3, step 6之间失败, 系统必须确保此更新没有在系统中没有遗留痕迹,否则将导致不一致。 Durability 一旦用户被告知事务已经完成 (即转帐成功), 则该事务对数据库所做的更新操作必须是永久性的, 即使出现某些失败的情形. Isolation 若在步骤3, step 6, 有另外一个事务允许存取被部分更新的数据库, 则它将看到一个不一致的数据库。(即A + B 的和小于它应该有的值). 通过串行地执行事务,可以确保隔离性,但是事务的并发执行可以带来更多的好处.,8.1 事务的基本概念,事务的一致性必须建立在用户程序逻辑正确性的基础之上。即:当用户提交事务的时候,必须保证当它运行完毕之际,将数据库保持在一个一致性的状态。 DBMS通过恢复机制来确保事务的原子性和永久性。 隔离性是通过提供一套并发控制的机制而得以实现。,8.1 事务的基本概念,3、事务的状态,8.1 事务的基本概念,4、更新事务的执行与恢复 更新事务的执行要求: 更新事务在活动状态下对数据库的任何修改都不能直接在磁盘中进行,而只能在内存缓冲区中进行。 更新事务的恢复: (1)从活动状态转入失败状态的恢复 (2)从局部提交状态转入失败状态的恢复。,8.1 事务的基本概念,5. 事务处理面对的问题和要求。 事务执行期间,数据库可能是不一致的。 事务提交后,数据库必须是一致的。 主要处理两种情况: (1) 多个事务的并发执行:并发控制。 (2) 各类型原因所导致的失败,硬件故障,系统崩溃等:故障恢复。,故障种类:事务故障,系统故障,硬件故障 数据库的恢复: 指DBMS必须具有把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)的功能。 数据库恢复原理:冗余 建立冗余数据常用技术: (1) 数据转储 (2) 登记日志文,8.2 恢复技术概述,8.3 恢复的实现技术,一、数据转储 1. 数据转储的概念 转储即DBA定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本或后援副本。,得到 副本,转储,运行事务,数据转储与恢复例,8.3 恢复的实现技术,2、静态转储和动态转储 (1)静态转储:是在系统中无运行事务时进行的转储操作。 静态转储得到的一定是一个数据一致性的副本。 (2)动态转储:是指转储期间允许对数据库进行存取或修改。后备副本需配合日志文件。 3、海量转储和增量转储 (1)海量转储:每次转储全部数据库。 (2)增量转储:每次只转储上一次转储后更新过的数据。,8.3 恢复的实现技术,二、登记(建立)日志文件 1、日志文件的格式和内容 日志文件用来记录事务对数据库的更新操作的文件。 日志文件主要有两种格式: 以记录为单位 以数据块为单位,8.3 恢复的实现技术,(1)以记录为单位的日志文件内容: 事务开始、结束标记 操作对象(表、属性等) 更新前、后值 (2)以数据块为单位的日志文件内容: 事务标识(标明是那个事务) 操作的类型(插入、删除或修改) 操作对象(记录内部标识) 更新前数据的旧值(对插入操作而言,此项为空值) 更新后数据的新值(对删除操作而言, 此项为空值),8.3 恢复的实现技术,例:日志文件中的一个日志记录例子 事务编号 表 元组标识 属性 更新前 更新后 201 *事务开始 201 库存 k102 在库数量 410 310 201 应收帐 801-2341233 余额 1000 6000 201 *事务提交,8.3 恢复的实现技术,2、日志文件的作用 事务故障恢复和系统故障必须用日志文件。 在动态转储方式中必须建立日志文件,后援副本和日志文件综合起来才能有效地恢复数据库。 在静态转储方式中,也可以建立日志文件。,作用?,8.3 恢复的实现技术,3、登记日志文件 应遵循两条原则: (1)登记的次序严格按并发事务执行的时间次序。 (2)必须先写日志文件,后写数据库。,静态转储,运行事务,登记日志文件,为什么要先写日志文件 写数据库和写日志文件是两个不同的操作 在这两个操作之间可能发生故障 如果先写了数据库修改,而在日志文件中没有登记下这个修改,则以后就无法恢复这个修改了 如果先写日志,但没有修改数据库,按日志文件恢复时只不过是多执行一次不必要的UNDO操作,并不会影响数据库的正确性,8.3 恢复的实现技术,8.4 故障恢复,一、事务故障及恢复 事务故障: 是指事务运行过程中由于种种原因使事务未运行至正常终止点而夭折的情况。如: 运算溢出 死锁而被选中撤销该事务 违反了完整性规则等 事务故障的恢复: (1)反向扫描文件日志,查找该事务的更新操作。 (2)对该事务的更新操作执行逆操作。 (3)重复(1)、(2)直到遇此事务的开始标记。,8.4 故障恢复,二、系统故障及恢复(软故障) 系统故障:是指造成系统停止运转的任何事件,使得系统要重新启动。 例如,特定类型的硬件错误(CPU故障)、操作系统故障、DBMS代码错误、突然停电等。 系统故障的恢复: 恢复操作: 要撤销故障发生时未完成的事务 重做(REDO)已完成的事务 系统故障的恢复是由系统在重新启动时自动完成的,不需要用户干预。,8.4 故障恢复,三、介质故障(硬故障) 介质故障:是指外存设备故障。如: 磁盘损坏 磁头碰撞盘面 瞬时强磁场干扰 介质故障的恢复: (1)装入最新的数据库后备副本,使数据库恢复到最近一次转储时的一致性状态。 (2)装入相应的日志文件副本,重做已完成的事务。 介质故障的恢复需要DBA介入。但DBA只需要重装最近转储的数据库副本和有关的各日志文件副本,然后执行系统提供的恢复命令即可,具体的恢复操作仍由DBMS完成。,8.4 故障恢复,四、具有检查点的恢复技术 利用日志文件进行数据库恢复时存在的问题: (1)搜索整个日志文件将耗费大量的时间。 (2)很多需要REDO处理的事务实际上已经将它们的 更新操作结果写到数据库中了,然而恢复子系统又重新执 行了这些操作,浪费了大量时间。 解决:使用检查点方法。 当事务T在一个检查点之前提交,T对数据库所做的修 改一定都已经写入数据库,这样,在进行恢复处理时,就 不必对事务T执行REDO操作,从而改善了恢复效率。,8.4 故障恢复,增加:日志文件中的检查点记录 一个重新开始文件 并让恢复子系统在登录日志文件期间动态地维护日志。 检查点记录的内容包括: 建立检查点时刻所有正在执行的事务清单(Ti)。 各事务最近一个日志记录的地址(Di)。,检查点记录,检查点Ci的重新开始记录,8.4 故障恢复,动态维护日志文件的方法是周期性地执行: 建立检查点,保存数据库状态。具体步骤是: 将当前所有日志记录写入磁盘日志文件上; 在日志文件中写入一个检查点记录; 将当前所有数据记录写入磁盘的数据库中; 把检查点记录在日志文件中的地址写入重新开始文件。 恢复系统将根据事务的不同状态采取不同的恢复策略:,在检查点前开始,在 其后且故障点前提交,不重做,8.4 故障恢复,系统使用检查点方法进行恢复的步骤是: 从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录。 由该检查点记录得到检查点建立时刻所有正在执行的事务清单ACTIVE-LIST。 从检查点开始正向扫描日志文件 如有新开始的事务Tj,把Tj暂时放入UNDO-LIST队列; 如有提交的事务Tj,把Tj从UNDO-LIST队列移到REDO-LIST 队列;直到日志文件结束。 对UNDO-LIST中的每个事务 执行UNDO操作,对REDO-LIST 中的每个事务执行REDO操作。,8.4 故障恢复,五、数据库镜像 根据DBA的要求,自动把整个数据库或其中的关键数据复制到另一个磁盘上。DBMS自动保证镜像数据与主数据的一致性。 作用: 一旦出现介质故障,可由镜像磁盘继续提供使用,同时DBMS自动利用镜像磁盘数据进行数据库的恢复,不需要关闭系统和重装数据库副本。,在没有出现故障时,数据库镜像还可以用于并发操作,即当一个用户对数据加排它锁修改数据时,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁。,8.4 故障恢复,图8.6 数据库镜像,镜像,DB,8.5 事务并发控制,并发操作在多用户共享系统中,多个用户同时存取同一数据的情形称为并发操作。 并发操作的优点: 增加了处理器和磁盘的可用性, 加大事务吞吐量(throughput):一个事务使用CPU时,另外一个事务读写磁盘 降低平均事务响应时间: 短事务不需要等待长事务 并发操作可能带来的问题: (1)破坏数据库的一致性 (2)破坏事务的隔离性,8.5.1 三类数据不一致性,并发操作带来的三类数据不一致性: 1. 更新丢失 T1、T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果。,A=16,甲事务,乙事务,A=15,8.5.1 三类数据不一致性,2不可重读 T1读数据后,T2执行更新操作,使T1无法再现前一次读取结果。,B=100,甲事务,乙事务,B=100,不可重读包括三种情况: (1) 某事务两次读同一数据时,得到的值不同。 (2)某事务再次按相同条件读取数据时,发现记录丢失。 (3)某事务再次按相同条件读取数据时,发现多了记录。,8.5.1 三类数据不一致性,3脏读 T1修改数据并写回磁盘,T2读取同一数据后,T1被撤销即数据恢复原值,T2读的数据与DB中的不一致,称“脏”数据。 并发控制方法:封锁,C=100,甲事务,乙事务,C=200,C=100,“脏”数据,什么是封锁? 封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁 加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。 封锁是实现并发控制的一个非常重要的技术,8.5.2 封锁,8.5.2 封锁,两种基本的封锁类型 排它锁(X锁或写锁): 保证其他事务在T释放A上的锁之前,不能再读取和修改A。,共享锁(S锁或读锁): 保证其他事务可以读A,但在T释放A上的S锁之前,不能对A做任何修改。,数据 对象A,事务T,T可读、不可改A,数据 对象A,事务T,T可读、修改A,8.5.2 封锁,一级封锁:没有丢失修改数据,8.5.2 封锁,二级封锁:读脏数据,8.5.2 封锁,三级封锁:可重读,8.5.3 活锁与死锁,活锁:使某个事务永远处于等待状态,而得不到执行的现象称为活锁。,等待,数据 R,避免活锁的方法:先来先服务。,8.5.3 活锁与死锁,死锁:,数据 R1,数据 R2,请求加锁,8.5.3 活锁与死锁,1、死锁的预防 (OS中预防死锁的方法) (1)一次加锁法 要求每个事务必须一次将所要使用的数据全部加锁。 一次封锁法存在的问题: 降低并发度。因为将以后可能要用到的全部数据加锁,势必将扩大封锁的范围,延长封锁的时间,从而降低了系统的并发度。,8.5.3 活锁与死锁,(2)顺序封锁法 预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。 顺序封锁法存在的问题: 维护成本高:数据库系统中可封锁的数据对象极其众多,并且随数据的插入、删除等操作而不断地变化,要维护这样极多而且变化的资源的封锁顺序非常困难,成本很高 难于实现:事务的封锁请求可以随着事务的执行而动态地决定,很难事先确定每一个事务要封锁哪些对象,因此也就很难按规定的顺序去施加封锁。 例:规定数据对象的封锁顺序为A,B,C,D,E。事务T3起初要求封锁数据对象B,C,E,但当它封锁了B,C后,才发现还需要封锁A,这样就破坏了封锁顺序.,8.5.3 活锁与死锁,关于死锁预防的结论 在操作系统中广为采用的预防死锁的策略并不很适合数据库的特点 DBMS在解决死锁的问题上更普遍采用的是诊断并解除死锁的方法:允许死锁发生,由DBMS的并发控制子系统定期检测系统中是否存在死锁,一旦检测到死锁,再设法解除。,8.5.3 活锁与死锁,2、死锁的诊断 (1)超时法 事务等待时间超过规定时限,就认为发生了死锁。时限长短。 (2)等待图法 检测事务等待图中是否存在回路。事务为节点,两个事务之间的等待关系为边。 3、死锁的解除 选择一个处理代价最小的事务,将其撤消,释放此事务持有的所有锁。,8.5.4 并发调度的可串行化,封锁是并发控制的一项重要技术,但如下问题尚未得到回答: 1. 什么样的并发调度是正确的? 2. 如何保证并发调度是正确的?,8.5.4 并发调度的可串行化,调度:事务的执行次序。 事务执行方式: (1)串行执行 (2)并行执行 串行执行:多个事务依次顺序执行。 并行执行:多个事务按一定的调度策略同时执行。 可串行化调度 :如果一个事务序列并发执行的结果等价于某一个串行执行的结果,称这种调度策略为可串行化的调度。,8.5.4 并发调度的可串行化,例:表8.8的串行调度(T1T2) p251 执行结果:A=9000,B=31000; 例:表8.9的串行调度(T2T1) 执行结果:A=8000,B=32000; 例:表8.10 并行调度 执行结果:A=9000,B=31000; 与表8.8的串行调度结果相同,为可串行化调度。 例:表8.11 并行调度 执行结果:A=10000,B=22000; 与表7.8、7.9的串行调度结果都不同,为不可串行化调度。 注意: (1)一组事务并发调度的正确性准则:可串行化调度。 (2)一组事务的可串行化调度不惟一。,8.5.4 并发调度的可串行化,保证并发操作调度正确性的方法 封锁方法:两段锁(Two-Phase Locking,简称2PL)协议 时间戳协议,8.5.4 并发调度的可串行化,两段锁协议:指所有事务必须分两个阶段对数据项加锁和解锁。 获得封锁:对任何数据进行读、写操作之前,要申请并获得对该数据的封锁; 释放封锁:释放一个封锁后,事务不再申请和获得任何其他封锁。 例如:事务T遵守两段锁协议,其封锁序列是; Slock A Slock B Xlock C Unlock B Unlock A Unlock C |,8.5.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不遵守两段协议。,8.5.4 并发调度的可串行化,并行执行的所有事务均遵守两段锁协议,则对这些事务的所有并行调度策略都是可串行化的。 所有遵守两段锁协议的事务,其并行执行的结果一定是正确的 事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件 可串行化的调度中,不一定所有事务都必须符合两段锁协议。,8.5.4 并发调度的可串行化,两段锁协议与防止死锁的一次封锁法 一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行,因此一次封锁法遵守两段锁协议 但是两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁,8.5.4 并发调度的可串行化,两段锁协议与三级封锁协议 两类不同目的的协议 两段锁协议 保证并发调度的正确性 三级封锁协议 在不同程度上保证数据一致性(不可重读、脏数据、更新丢失) 遵守第三级封锁协议必然遵守两段协议,T1 Slock B 读B=2 Y=B Xlock A A=Y+1 写回A=3 Unlock B Unlock A,T2 Slock A 等待 等待 等待 等待 等待 Slock A 读A=3 Y=A Xlock B B=Y+1 写回B=4 Unlock B Unlock A,T1 Slock B 读B=2 Y=B Unlock B Xlock A A=Y+1 写回A=3 Unlock A,T2 Slock A 等待 等待 等待 等待 Slock A 读A=3 X=A Unlock A Xlock B B=X+1 写回B=4 Unlock B,(a) 遵守两段锁协议,(b) 不遵守两段锁协议,T1 Slock B 读B=2 Y=B Unlock B Xlock A A=Y+1 写回A=3 Unlock A,(c) 不遵守两段锁协议,8.5.4 并发调度的可串行化,时间戳是事务进入系统的时间 系统时钟 逻辑计数器 W-timesatmp(Q) 成功执行write(Q)事务的最大时间戳 R-timesatmp(Q) 成功执行read(Q)事务的最大时间戳 时间戳协议 假设事务Ti发出read(Q) 如果TS(Ti)= W-timesatmp(Q) 则执行read操作, R-timesatmp(Q)设为R-timesatmp(Q)和TS(Ti)的最大值,8.5.4 并发调度的可串行化,假设事务Ti发出write(Q) 如果TS(Ti) R-timesatmp(Q) ,则Ti产生的值是先前需要的值,且系统已假定该值不会被产生,write操作被拒绝, Ti回滚 如果TS(Ti) W-timesatmp(Q) ,Ti写入的值已过时,write操作被拒绝, Ti回滚;否则,执行write操作:将W-timesatmp(Q) 设为TS(Ti)。,8.6 封锁的粒度,封锁粒度:封锁对象的大小。 封锁对象:属性、元组、关系、数据库 封锁粒度与系统的并发度和并发控制的开销密切相关: 封锁的粒度越大,并发度越小,系统开销越小; 封锁的粒度越小,并发度越高,系统开销越大。 多粒度封锁:一个系统中同时支持多种封锁粒度供不同事务选择的封锁方法。 封锁粒度选择原则: (1)需处理
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 印刷安全控制管理制度
- 工程安装人员管理制度
- 工地作业监督管理制度
- 厂内特种设备管理制度
- 医用氧气销售管理制度
- 外包食堂员工管理制度
- 学校四类人员管理制度
- 城市绿化公司管理制度
- 婚庆公司提成管理制度
- 学校教学现场管理制度
- 电子胎心监护应用专家共识解读
- 2025湖南中考:英语必背知识点
- 2025年内蒙古自治区呼和浩特市中考二模英语试题 (含答案无听力音频及原文)
- 2025-2030中国智能助听器行业市场发展趋势与前景展望战略研究报告
- 别墅的施工合同范本
- 食盐安全追溯管理制度
- 食堂餐厅就餐管理制度
- 辅导员考试题型及出题趋势试题及答案
- 2025-2030中国移动球幕影院行业市场现状分析及竞争格局与投资发展研究报告
- 2025湖北省安全员考试题库附答案
- 中国政治制度史复习重点
评论
0/150
提交评论