数据库系统概论第八章.ppt_第1页
数据库系统概论第八章.ppt_第2页
数据库系统概论第八章.ppt_第3页
数据库系统概论第八章.ppt_第4页
数据库系统概论第八章.ppt_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

数据库原理与应用,数据库系统概论 第4版 王 珊 萨师煊,第八章 数据库保护,事务的并发控制 数据库的备份与恢复,8.1 事务的基本概念,1、事务 事务是用户定义的一个数据库的操作序列,这些操作要么全做,要么全不做,是一个不可分割的整体。 BEGIN TRANSACTION SELECT UPDATE COMMIT(或ROLLBACK),8.1 事务的基本概念,例:银行转帐业务,从A帐户将1000元转帐到B帐户。 实现的过程: A帐户余额是否足够; A帐户余额减去1000; 检查B帐户是否合法; B帐户余额加上1000;,这些操作要么都做,要么都不做!,8.1 事务的基本概念,2、事务的特性 原子性(Atomicity) 要么全部执行,要么完全不执行 一致性(Consistency) 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。 隔离性(Isolation) 一个事务的执行不能被其他事务干扰。 持续性(Durability) 一个事务一旦提交,它对数据库的改变就是永久性的。,8.1 事务的基本概念(续),事务是恢复和并发控制的基本单位。 事务的ACID特性可能被破坏的因素: 多个事务并发执行,产生了操作交叉; 事务在运行过程中被强行停止。,8.1 事务的基本概念(续),3、SQL Server中事务的模式 显式事务 通过SQL事务语句而定义的事务 。 BEGIN TRANSCATION、COMMIT TRANSCATION 、(ROLLBACK TRANSCATION) 隐式事务 SET IMPLICITY_TRANSACTIONS ON、 SET IMPLICITY_TRANSACTIONS OFF语句进入和退出隐式事务连接模式。 自动事务模式 当一个语句成功执行后,它被自动提交,而当事务执行过程中产生错误时,则被自动回滚。,8.1 事务的基本概念(续),4、事务的使用实例 在DBMS中进行事务处理 利用显式事务的方式将一系列操作定义成一个事务,所有操作都完成,则事务提交,否则事务回滚。 或者 进入隐式事务方式,通过COMMIT TRANSACTION完成一个事务的提交。,BEGIN TRAN IF EXISTS(SELECT * FROM BANK WHERE UID=A) BEGIN IF(SELECT MONEY FROM BANK WHERE UID=A)1000 BEGIN UPDATE BANK SET MONEY=MONEY-1000WHERE UID=A SELECT * FROM BANK IF EXISTS(SELECT * FROM BANK WHERE UID=B) BEGIN UPDATE BANK SET MONEY=MONEY+1000 WHERE UID=B COMMIT TRAN END ELSE ROLLBACK TRAN END ELSE PRINT A帐户余额不足! END ELSE PRINT 帐户不存在!,8.1 事务的基本概念(续),4、事务的使用实例 在应用程序中设置事务 例如:在java中,通过调用setAutoCommit(false)方法关系自动提交事务。采用commit()方法来提交数据库操作; rollback()方法来进行事务回滚。,Connection conn=null; try try conn= DriverManager.getConnection(connectionUrl); conn.setAutoCommit(false); /禁止自动提交事务 /数据库操作 Statement stmt = conn.createStatement(); String sqlText=“update bank set money=money-1000 where uid=A“; stmt.executeUpdate(sqlText); sqlText=“select uid from bank where uid=B“; ResultSet rs = stmt.executeQuery(sqlText); if(rs.next() sqlText=“update bank set money=money+1000 where uid=B“; stmt.executeUpdate(sqlText); mit();/事务提交 out.println(“转帐成功!“); else conn.rollback();/事务回滚 out.println(“转帐失败!“); finally ,8.2 并发控制概述,1、什么是事务的并发执行?,T1,T2,T3,T1,T2,T3,(a)事务的串行执行,(b)事务的并发执行(单处理机),8.2 并发控制概述(续),2、并发事务带来的不一致性问题 丢失修改,丢失更新问题是由于两个事务对同一数据并发写入所引起的,8.2 并发控制概述(续),2、并发事务带来的不一致性问题 不可重复读,事务T1和T2并发执行,产生读值不可复现的情况,8.2 并发控制概述(续),2、并发事务带来的不一致性问题 读脏数据,读脏数据问题是由于一个事务读另一个更新事务尚未提交的数据所引起的,8.2 并发控制概述(续),并发控制的任务就是避免访问冲突所引起的数据不一致。数据库管理系统一般都提供并发控制机制,即采用对资源加锁的方法控制用户并发操作。,8.2 并发控制概述(续),3、封锁的概念 事务T在对某个数据对象,如表、记录等操作之前,需要向系统发出请求,对其加锁。加锁后事务T对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。,8.2 并发控制概述(续),3、封锁的概念 基本的封锁类型: 写锁(排它锁,即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,但是不能对A进行任何修改。,8.2 并发控制概述(续),8.2 并发控制概述(续),T1 Xlock(x) read(x) x:=x+1 write(x) commit unlock(x),T2 申请Xlock(x) 等待 等待 等待 等待 等待 Xlock(x) read(x) x:=x+1 write(x) commit unlock(x),封锁机制解决“丢失修改”问题,8.2 并发控制概述(续),6、活锁 多个事务并发执行时,某个事务有可能永远处于等待状态,形成了活锁的情形。 活锁的解决方式 先来先服务,8.2 并发控制概述(续),7、死锁 一个事务如果申请锁而未获准,则需等待其他事务释放锁,这就形成了事务间的等待关系。当事务之间出现循环等待时,如果不加干预则会一直等待下去,即出现死锁。,8.2 并发控制概述(续),8、死锁的预防 一次封锁法 要求每个事务必须一次将所有要使用的数据全部加锁,否则就等待。 缺点: 扩大了封锁范围,降低了系统的并发度 难以预测所有需要封锁的对象,8.2 并发控制概述(续),8、死锁的预防 顺序封锁法 预先对数据对象规定一个封锁顺序,所有事务都按这个顺序进行封锁。 缺点: 维护封锁顺序非常困难 难以按规定去执行,8.2 并发控制概述(续),9、死锁的诊断与解除 诊断: (1)超时法:如果一个事务的等待时间超过了规定的时限,则认为发生了死锁。 (2)等待图法:有向图中如果存在回路,则表示出现了死锁。 解除: 选择一个处理死锁代价最小的事务,释放该事务占有的资源,8.2 并发控制概述(续),10、可串行性化调度 定义:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同,称这种调度为可串行化的调度。 可串行性是评价并发调度正确性的准则。,8.2 并发控制概述(续),举例: 有两个事务,分别包含下列操作(假定A、B的初值均为2) 事务T:读B;A=B+1;写回A; 事务T2:读A;B=A+1;写回B; 两个事务串行的结果: T1-T2 结果1:A=3,B=4 T2-T1 结果2:A=4,B=3,8.2 并发控制概述(续),T1 Slock(B) Read(B):B=2 Unlock(B) Xlock(A) A=B+1=3 Write(A) commit unlock(A),T2 Slock(A) Read(A):A=2 Unlock(A) Xlock(B) B=A+1=3 Write(B) commit unlock(B),是否为正确的调度?即是否为可串行化调度?说明理由,8.2 并发控制概述(续),T1 Slock(B) Read(B):B=2 Unlock(B) Xlock(A) A=B+1=3 Write(A) commit unlock(x),T2 Slock(A) 等待 等待 等待 等待 Read(A):A=3 Unlock(A) Xlock(B) B=A+1=4 Write(B) commit unlock(x),是否为正确的调度?即是否为可串行化调度?说明理由,8.2 并发控制概述(续),11、两段锁协议 对数据对象加锁时约定的规则称为封锁协议。两段锁协议是最常用的一种封锁协议。 两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。 在对任何数据进行读、写操作之前,首先获得对数据的封锁; 在释放一个封锁之后,事务不再申请和获得任何其他封锁; 两段锁协议是保证并发事务可串行化调度的充分条件。,8.2 并发控制概述(续),T1 Slock(B) Read(B):B=2 Xlock(A) A=B+1=3 Unlock(B) Write(A) Commit Unlock(x),T2 Slock(A) 等待 等待 等待 等待 Read(A):A=3 Xlock(B) B=A+1=4 Write(B) Commit Unlock(A) Unlock(x),加锁阶段,解锁阶段,遵守两段锁协议的可串行化调度,8.2 并发控制概述(续),T1 Slock(B) Read(B):B=2 Xlock(A) 等待 等待 ,T2 Slock(A) Read(A):A=2 Xlock(B) 等待 等待 ,加锁阶段,遵守两段锁协议的并发调度可能产生死锁的情况,虽然两段锁协议与一次封锁法不同,不需要一次将所有需要的数据全部加锁,但是由于加锁和解锁分成了两个阶段,也会导致死锁的产生。,8.2 并发控制概述(续),12、封锁粒度 封锁对象的大小称为封锁粒度。 封锁的对象可以是逻辑单元,如数据项、元组、关系、索引、数据库等;也可以是物理单元,如页、块、物理记录等。 封锁的粒度越大,数据库所能够封锁的数据单元就越少,并发度越小,系统开销也小;反之,封锁的粒度越小,并发度越高,系统开销也越大。,8.2 并发控制概述(续),13、多粒度封锁 一个DBMS系统中同时支持多种封锁粒度供不同的事务选择是比较理想的,这种封锁方法称为多粒度锁(Multiple Granularity Locking)。选择封锁粒度应同时考虑封锁开销和并发度两个因素,适当选择封锁粒度以求得到最优的效果。,8.2 并发控制概述(续),13、多粒度封锁 多粒度树 多粒度树的根结点是整个数据库,表示最大的数据粒度。叶结点表示最小的数据粒度。,多粒度封锁协议允许多粒度树中的每个结点可以被独立的加锁,对一个结点的加锁意味着这个结点的所有后裔结点也被加上了相同类型的锁。 多粒度封锁在对数据对象进行封锁时即要检查显示封锁,也要检查隐式封锁。导致效率较低。,8.2 并发控制概述(续),14、意向锁 意向锁表示对某个数据对象进行加锁,必须先对其上层结点加意向锁。常用的三种意向锁: IS(意向共享锁):对一个数据对象加IS,表示其后裔要加S锁。 IX(意向排他锁):对一个数据对象加IX,表示其后裔要加X锁。 SIX(共享意向排他锁):对一个数据对象加SIX,表示其后裔要先加S,再加IX。,8.3 数据库备份与恢复,数据库恢复操作是指在系统出现故障时,由系统管理员或数据库所有者利用数据库备份和日志备份恢复系统或用户数据库。 数据库恢复的目标是使之恢复到故障发生之前数据库最后的完整性状态。,8.3 数据库备份与恢复(续),1、故障种类 事务内部故障 事务由于自身原因未能达到预期的终点。有的情况是可预期的,有些情况是不可预期的。 例如:银行转帐事务,把一笔金额从帐户A转移到帐户B,如果帐户A的存款不够,该事务就必须撤消。 这个事务是可预期的,可通过应用程序解决。让事务回滚,撤销已作的修改,恢复数据库到正确状态。 由于发生死锁而导致对事务的撤销或者违反了数据库的完整性要求等故障属于不可预期的故障。因此对此类事务必须强制ROLLBACK,以保证数据库的一致性。,8.3 数据库备份与恢复(续),1、故障种类 系统故障 是指造成系统停止运转的任何事件,使得系统要重新启动。一般情况下是由于特定的硬件错误(如CPU故障)、操作系统故障、DBMS代码错误等。 解决方法: 恢复系统必须在系统重新启动的时候让所有非正常终止的事务回滚,强行撤销所有未完成的事务。 恢复系统要重作所有提交的事务,将数据库恢复到一致的状态。,8.3 数据库备份与恢复(续),1、故障种类 介质故障 存储介质故障是指由于猛烈地碰撞使存储设备发生故障 。 此类故障的破坏性最大。 计算机病毒 人为的故障或破坏。,8.3 数据库备份与恢复(续),总结数据库的故障主要是两大类: 数据库被破坏 数据库中的数据处于不一致的状态 采用数据库恢复技术解决数据库的故障,其本质是:数据冗余,8.3 数据库备份与恢复(续),2、恢复的实现技术 恢复机制的关键问题: 1)如何建立冗余数据? 2)如何利用冗余数据实施数据库恢复? 建立冗余数据的技术: 1)数据转储 2)登录日志文件,8.3 数据库备份与恢复(续),2、数据转储 转储是数据库恢复采取的最基本技术。 转储分为静态转储和动态转储。 静态转储通常选择数据库正处于完整性状态的适当时机,即在没有更新事务执行时,把整个数据库转储到其它介质上。 动态转储是指转储期间允许对数据库进行存取或修改,即转储和用户事务可以并发执行。必须将转储期间事务的活动记录下来,建立日志文件。,P1,P2,P3,P4为4个事务 P1事务在转储前就已提交,无须重做; P2为发生故障前就已经正常提交的事务,恢复时必须重做P2事务; P3,P4是未提交的事务,事务被撤销。,P1,P2,P3,P4为4个事务 P1事务在转储前就已提交,无须重做; P2为发生故障前就已经正常提交的事务,恢复时必须重做P2事务; P3,P4是未提交的事务,事务被撤销。,恢复时必须用备份数据和日志文件共同恢复。,8.3 数据库备份与恢复(续),2、数据转储 根据转储的数据,又可分为海量转储和增量转储。 海量转储:每次转储全部数据库。 增量转储:只转储上一次转储后更新过的数据。,8.3 数据库备份与恢复(续),3、登记日志文件 日志文件是用来记录事务对数据库的更新操作的文件。所有事务的更新日志都放在同一个日志文件中。 日志文件中需

温馨提示

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

评论

0/150

提交评论