第7章数据库系统的恢复和并发控制

上传人:飞*** 文档编号:50719925 上传时间:2018-08-10 格式:PPT 页数:51 大小:357KB
返回 下载 相关 举报
第7章数据库系统的恢复和并发控制_第1页
第1页 / 共51页
第7章数据库系统的恢复和并发控制_第2页
第2页 / 共51页
第7章数据库系统的恢复和并发控制_第3页
第3页 / 共51页
第7章数据库系统的恢复和并发控制_第4页
第4页 / 共51页
第7章数据库系统的恢复和并发控制_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《第7章数据库系统的恢复和并发控制》由会员分享,可在线阅读,更多相关《第7章数据库系统的恢复和并发控制(51页珍藏版)》请在金锄头文库上搜索。

1、返回返回第7章数据库系统的恢复和并发控制1返回返回7.1 数据库并发性的含义 上一章讨论的完整性是保证各个事务本身能得到正确 的数据,只考虑一个用户使用数据库的情况,但实际 上数据库中有许多用户。 每个用户在存取数据库中的数据时,可能是串行执行 ,即每个时刻只有一个用户程序运行,也可能是多个 用户并行地存取数据库。 数据库的最大特点之一就是数据资源是共享的,串行 执行意味着一个用户在运行程序时,其他用户程序必 须等到这个用户程序结束才能对数据库进行存取,这 样如果一个用户程序涉及大量数据的输入/输出交换, 则数据库系统的大部分时间将处于闲置状态。7 并发控制与封锁2返回返回因此,为了充分利用数

2、据库资源,很多时候数 据库用户都是对数据库系统并行存取数据,这 样就会发生多个用户并发存取同一数据块的情 况,如果对并发操作不加控制可能会产生不正 确的数据,破坏数据的完整性,并发控制就是 解决这类问题,以保持数据库中数据的一致性 。 7.2 事务(Transaction) 7.2.1 事务的定义 DBMS的并发控制是以事务为基本单位进行的。 那么到底什么是事务呢?3返回返回 事务是数据库系统中执行的一个工作单位,它是由用 户定义的一组操作序列。 一个事务可以是一组SQL语句、一条SQL语句或整个程 序,一个应用程序可以包括多个事务。 事务的开始与结束可以由用户显式控制。如果用户没 有显式地定

3、义事务,则由DBMS按照缺省规定自动划分 事务。在SQL语言中,定义事务的语句有三条: v BEGIN TRANSACTION v COMMIT v ROLLBACKv BEGIN TRANSACTION表示事务的开始; v COMMIT表示事务的提交,即将事务中所有对数据库的更新写 回到磁盘上的物理数据库中去,此时事务正常结束; v ROLLBACK表示事务的回滚,即在事务运行的过程中发生了某 种故障,事务不能继续执行,系统将事务中对数据库的所有 已完成的更新操作全部撤销,再回滚到事务开始时的状态。 4返回返回7.2.2 事务的特征 事务是由有限的数据库操作序列组成,但并不是任意 的数据库操

4、作序列都能成为事务,为了保护数据的完 整性,一般要求事务具有以下四个特征:1原子性(Atomic) 一个事务是一个不可分割的工作单位,事务在执行时 ,应该遵守“要么不做,要么全做”(nothing or all)的原则,即不允许事务部分的完成。 即使因为故障而使事务未能完成,它执行的部分结果 要被取消。5返回返回2一致性(Consistency) 事务对数据库的作用是数据库从一个一致状态 转变到另一个一致状态。 所谓数据库的一致状态是指数据库中的数据满 足完整性约束。 v例如,银行企业中,“从帐号A转移资金额R到帐号 B”是一个典型的事务,这个事务包括两个操作,从 帐号A中减去资金额R和在帐号

5、B中增加资金额R,如 果只执行其中一个操作,则数据库处于不一致状态 ,帐务会出现问题。也就是说,两个操作要么全做 ,要么全不做,否则就不能成为事务。 可见事务的一致性与原子性是密切相关的。6返回返回3隔离性(Isolation) 如果多个事务并发地执行,应像各个事务独立 执行一样,一个事务的执行不能被其他事务干 扰。 即一个事务内部的操作及使用的数据对并发的 其他事务是隔离的。 并发控制就是为了保证事务间的隔离性。4持久性(Durability) 指一个事务一旦提交,它对数据库中数据的改 变就应该是持久的,即使数据库因故障而受到 破坏,DBMS也应该能够恢复。7返回返回 事务上述四个性质的英文

6、术语的第一个字母为ACID。 因此,这四个性质以称为事务的ACID准则。 下面是一个事务的例子,从帐号A转移资金额R到帐号B : BEGIN TRANSACTIONREAD AAA-RIF A0 /* A 款不足*/THENBEGINDISPLAY “A款不足”ROLLBACKEND ELSE /* 拨款 */BEGINBB+RDISPLAY “拨款完成”COMMITEND8返回返回这是对一个简单事务的完整的描述。 该事务有两个出口: v当A 帐号的款项不足时,事务以ROLLBACK( 撤销)命令结束,即撤销该事务的影响; v另一个出口是以COMMIT(提交)命令结束,完 成从帐号A到帐号B的

7、拨款。 q在COMMIT之前,即在数据库修改过程中,数据可能 是不一致的,事务本身也可能被撤销。 q只有在COMMIT之后,事务对数据库所产生的变化才 对其他事务开放,这就可以避免其他事务访问不一致或 不存在的数据。 9返回返回7.3 并发操作与数据的不一致性 当同一数据库系统中有多个事务并发运行时,如果不加 以适当控制,可能产生数据的不一致性。例1并发取款操作。假设存款余额R=1000元,甲事务T1取 走存款100元,乙事务T2取走存款200元,如果正常操作 ,即甲事务T1执行完毕再执行乙事务T2,存款余额更新 后应该是700元。但是如果按照如下顺序操作,则会有 不同的结果: v甲事务T1读

8、取存款余额R =1000元; v乙事务T2读取存款余额R =1000元; v甲事务T1取走存款100元,修改存款余额R =R 100=900 ,把R =900写回到数据库; v乙事务T2取走存款200元,修改存款余额R =R 200=800 ,把R =800写回到数据库。 10返回返回结果两个事务共取走存款300元,而数据库中 的存款却只少了200元。 得到这种错误的结果是由甲乙两个事务并发操 作引起的,数据库的并发操作导致的数据库不 一致性主要有以下三种: 1丢失更新(Lost Update) 当两个事务T1和T2读入同一数据做修改,并发 执行时, T2把T1或T1把T2的修改结果覆盖掉,

9、11返回返回造成了数据的丢失更新问题,导致数据的不一 致。 仍以上例中的操作为例进行分析。 v在表7.1中,数据库中R的初值是1000,事务T1包含 三个操作:读入R初值(FIND R);计算(R=R-100 );更新R(UPDATE R)。 v事务T2也包含三个操作:FIND R;计算(R=R-200) ;UPDATE R。 v如果事务T1和T2顺序执行,则更新后,R的值是700。 但如果T1和T2按照表7.1所示的并发执行,R的值是 800,得到错误的结果,原因在于在t7时刻丢失了T1 对数据库的更新操作。 v因此,这个并发操作不正确。12返回返回表7.1 丢失更新问题时间事务T1数据库中

10、R的值事务T2T0 1000 t1FIND R t2 FIND Rt3R=R-100 t4 R=R-200t5UPDATE R t6 900UPDATE Rt7 800 13返回返回2污读(Dirty Read)(读脏数据) 事务T1更新了数据R,事务T2读取了更新后的数据R, 事务T1由于某种原因被撤消,修改无效,数据R恢复原 值。事务T2得到的数据与数据库的内容不一致,这种 情况称为“污读”(读脏数据)。 在表7.2中,事务T1把R的值改为900,但此时尚未做 COMMIT操作,事务T2将修改过的值900读出来,之后事 务T1执行ROLLBACK操作,R的值恢复为1000,而事务T2 将仍

11、在使用已被撤消了的R值900。 原因在于在t4时刻事务T2读取了T1未提交的更新操作结 果,这种值是不稳定的,在事务T1结束前随时可能执 行ROLLBACK操作。 对于这些未提交的随后又被撤消的更新数据称为“脏 数据”。 v 比如,这里事务T2在t2时刻读取的就是“脏数据”。14返回返回表7.2 污读问题 时间事务T1数据库中R的值事务T2t0 1000 t1FIND R t2R=R-100 t3UPDATE R t4 900FIND Rt5ROLLBACK t6 1000 15返回返回3不可重读(Unrepeatable Read) 事务T1读取了数据R,事务T2读取并更新了数据R,当事 务

12、T1再读取数据R以进行核对时,得到的两次读取值不 一致,这种情况称为“不可重读”。 在表7.3中,在t0时刻事务T1读取R的值为1000,但事务 T2在t4时刻将R的值更新为为800。所以T1所使用的值已 经与开始读取的值不一致。时间事务T1数据库中R的值事务T2t0 1000 t1FIND R t2 FIND Rt3 R=R-200t4 UPDATE Rt5 800 表7.3 不可重读问题16返回返回 产生上述三类数据不一致性的主要原因就是并发操作 破坏了事务的隔离性。 并发控制就是要求DBMS提供并发控制功能以正确的方 式高度并发事务,避免并发事务之间的相互干扰造成 数据的不一致性,保证数

13、据库的完整性。7.4 封锁 实现并发控制的方法主要是封锁技术。 7.4.1 封锁类型(Lock Type) 所谓封锁就是当一个事务在对某个数据对象(可以是 数据项、记录、数据集、以至整个数据库)进行操作 之前,必须获得相应的锁,以保证数据操作的正确性 和一致性。17返回返回 封锁是目前DBMS普遍采用的并发控制方法,基本 的封锁类型有两种:排它锁和共享锁。 1排它锁(Exclusive Lock) v排它锁又称写锁,简称为X锁,其采用的原理是禁止并发 操作。 v当事务T对某个数据对象R实现X封锁后,其他事务要等T 解除X封锁以后,才能对R进行封锁。这就保证了其他事 务在T释放R上的锁之前,不能

14、再对R进行操作。 2共享锁(Share Lock) v共享锁又称读锁,,简称为S锁,其采用的原理是允许其 他用户对同一数据对象进行查询,但不能对该数据对象 进行修改。 v当事务T对某个数据对象R实现S封锁后,其他事务只能对 R加S锁,而不能加X锁,直到T释放R上的S锁。 v这就保证了其他事务在T释放R上的S锁之前,只能读取R ,而不能再对R作任何修改。18返回返回7.4.2 封锁协议(Lock Protocol) 封锁可以保证合理的进行并发控制,保证数据的一致性 。 在封锁时,要考虑一定的封锁规则,例如,何时开始封 锁、封锁多长时间、何时释放等,这些封锁规则称为封 锁协议。 对封锁方式规定不同

15、的规则,就形成了各种不同的封锁 协议。 封锁协议在不同程序上对正确控制并发操作提供了一定 的保证。 上面讲述过的并发操作所带来的丢失更新、污读和不可 重读等导致数据不一致性问题,可以通过三级封锁协议 在不同程度上给予解决,下面介绍三级封锁协议。19返回返回1一级封锁协议 一级封锁协议的内容是:事务T在修改数据对象之前必 须对其加X锁,直到事务结束。 具体地说,就是任何企图更新记录R的事务必须先执行 “XLOCK R”操作,以获得对该记录进行寻址的能力并 对它取得X封锁。 如果未获准“X 封锁”,那么这个事务进入等待状态, 一直到获准“X封锁”,该事务才继续做下去。 该事务规定事务在更新记录R时

16、必须获得排它性封锁, 使得两个同时要求更新R的并行事务之一必须在一个事 务更新操作执行完成之后才能获得X封锁,这样就避免 了两个事务读到同一个R值而先后更新时所发生的丢失 更新问题。20返回返回利用一级封锁协议可以解决表7.1中的数据丢失 更新问题,如表7.4所示。 事务T1先对R进行X封锁(XLOCK),事务T2执行 “XLOCK R”操作,未获准“X封锁”,则进 入等待状态,直到事务T1更新R值以后,解除X 封锁操作(UNLOCK X)。 此后事务T2再执行“XLOCK R”操作,获准 “X封锁”,并对R值进行更新(此时R已是事务 T1更新过的值,R=900)。 这样就能得出正确的结果。 21返回返回表7.4 无丢失更新问题时间事务T1数据库中R的值事务T2t0XLOCK R1000 t1FIND R t2 XLOC

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 企业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号