数据库系统概论第八章.ppt

上传人:牧羊曲112 文档编号:6166827 上传时间:2023-10-01 格式:PPT 页数:54 大小:498KB
返回 下载 相关 举报
数据库系统概论第八章.ppt_第1页
第1页 / 共54页
数据库系统概论第八章.ppt_第2页
第2页 / 共54页
数据库系统概论第八章.ppt_第3页
第3页 / 共54页
数据库系统概论第八章.ppt_第4页
第4页 / 共54页
数据库系统概论第八章.ppt_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《数据库系统概论第八章.ppt》由会员分享,可在线阅读,更多相关《数据库系统概论第八章.ppt(54页珍藏版)》请在三一办公上搜索。

1、数据库原理与应用,数据库系统概论第4版王 珊 萨师煊,第八章 数据库保护,事务的并发控制数据库的备份与恢复,8.1 事务的基本概念,1、事务事务是用户定义的一个数据库的操作序列,这些操作要么全做,要么全不做,是一个不可分割的整体。BEGIN TRANSACTIONSELECTUPDATECOMMIT(或ROLLBACK),8.1 事务的基本概念,例:银行转帐业务,从A帐户将1000元转帐到B帐户。实现的过程:A帐户余额是否足够;A帐户余额减去1000;检查B帐户是否合法;B帐户余额加上1000;,这些操作要么都做,要么都不做!,8.1 事务的基本概念,2、事务的特性原子性(Atomicity)

2、要么全部执行,要么完全不执行 一致性(Consistency)事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。隔离性(Isolation)一个事务的执行不能被其他事务干扰。持续性(Durability)一个事务一旦提交,它对数据库的改变就是永久性的。,8.1 事务的基本概念(续),事务是恢复和并发控制的基本单位。事务的ACID特性可能被破坏的因素:多个事务并发执行,产生了操作交叉;事务在运行过程中被强行停止。,8.1 事务的基本概念(续),3、SQL Server中事务的模式显式事务通过SQL事务语句而定义的事务。BEGIN TRANSCATION、COMMIT TRANSC

3、ATION、(ROLLBACK TRANSCATION)隐式事务SET IMPLICITY_TRANSACTIONS ON、SET IMPLICITY_TRANSACTIONS OFF语句进入和退出隐式事务连接模式。自动事务模式当一个语句成功执行后,它被自动提交,而当事务执行过程中产生错误时,则被自动回滚。,8.1 事务的基本概念(续),4、事务的使用实例在DBMS中进行事务处理利用显式事务的方式将一系列操作定义成一个事务,所有操作都完成,则事务提交,否则事务回滚。或者进入隐式事务方式,通过COMMIT TRANSACTION完成一个事务的提交。,BEGIN TRANIF EXISTS(SEL

4、ECT*FROM BANK WHERE UID=A)BEGINIF(SELECT MONEY FROM BANK WHERE UID=A)1000 BEGINUPDATE BANK SET MONEY=MONEY-1000WHERE UID=ASELECT*FROM BANKIF EXISTS(SELECT*FROM BANK WHERE UID=B)BEGINUPDATE BANK SET MONEY=MONEY+1000WHERE UID=BCOMMIT TRAN ENDELSEROLLBACK TRAN ENDELSE PRINT A帐户余额不足!ENDELSE PRINT 帐户不存在!

5、,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

6、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(转帐成功!);elseconn.rollback();/事务回滚 out.

7、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、的任务就是避免访问冲突所引起的数据不一致。数据库管理系统一般都提供并发控制机制,即采用对资源加锁的方法控制用户并发操作。,8.2 并发控制概述(续),3、封锁的概念事务T在对某个数据对象,如表、记录等操作之前,需要向系统发出请求,对其加锁。加锁后事务T对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。,8.2 并发控制概述(续),3、封锁的概念基本的封锁类型:写锁(排它锁,即X锁):若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直至T释放A上的锁,保证了其他事务在T释放A上的锁之前不能再读取和修改A。读锁(共享锁,

9、即S锁):若事务T对数据对象A加上S锁,则事务T可以读A,但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁,保证了其他事务可以读A,但是不能对A进行任何修改。,8.2 并发控制概述(续),8.2 并发控制概述(续),T1Xlock(x)read(x)x:=x+1write(x)commitunlock(x),T2申请Xlock(x)等待等待等待等待等待Xlock(x)read(x)x:=x+1write(x)commitunlock(x),封锁机制解决“丢失修改”问题,8.2 并发控制概述(续),6、活锁多个事务并发执行时,某个事务有可能永远处于等待状态,形成了活锁的

10、情形。活锁的解决方式先来先服务,8.2 并发控制概述(续),7、死锁一个事务如果申请锁而未获准,则需等待其他事务释放锁,这就形成了事务间的等待关系。当事务之间出现循环等待时,如果不加干预则会一直等待下去,即出现死锁。,8.2 并发控制概述(续),8、死锁的预防一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就等待。缺点:扩大了封锁范围,降低了系统的并发度 难以预测所有需要封锁的对象,8.2 并发控制概述(续),8、死锁的预防顺序封锁法预先对数据对象规定一个封锁顺序,所有事务都按这个顺序进行封锁。缺点:维护封锁顺序非常困难 难以按规定去执行,8.2 并发控制概述(续),9、死锁的诊

11、断与解除诊断:(1)超时法:如果一个事务的等待时间超过了规定的时限,则认为发生了死锁。(2)等待图法:有向图中如果存在回路,则表示出现了死锁。解除:选择一个处理死锁代价最小的事务,释放该事务占有的资源,8.2 并发控制概述(续),10、可串行性化调度定义:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同,称这种调度为可串行化的调度。可串行性是评价并发调度正确性的准则。,8.2 并发控制概述(续),举例:有两个事务,分别包含下列操作(假定A、B的初值均为2)事务T:读B;A=B+1;写回A;事务T2:读A;B=A+1;写回B;两个事务串行的结果:T1-T2 结

12、果1:A=3,B=4T2-T1 结果2:A=4,B=3,8.2 并发控制概述(续),T1Slock(B)Read(B):B=2Unlock(B)Xlock(A)A=B+1=3Write(A)commitunlock(A),T2Slock(A)Read(A):A=2Unlock(A)Xlock(B)B=A+1=3Write(B)commitunlock(B),是否为正确的调度?即是否为可串行化调度?说明理由,8.2 并发控制概述(续),T1Slock(B)Read(B):B=2Unlock(B)Xlock(A)A=B+1=3Write(A)commitunlock(x),T2Slock(A)等待

13、等待等待等待Read(A):A=3Unlock(A)Xlock(B)B=A+1=4Write(B)commitunlock(x),是否为正确的调度?即是否为可串行化调度?说明理由,8.2 并发控制概述(续),11、两段锁协议对数据对象加锁时约定的规则称为封锁协议。两段锁协议是最常用的一种封锁协议。两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。在对任何数据进行读、写操作之前,首先获得对数据的封锁;在释放一个封锁之后,事务不再申请和获得任何其他封锁;两段锁协议是保证并发事务可串行化调度的充分条件。,8.2 并发控制概述(续),T1Slock(B)Read(B):B=2Xlock(A)A=

14、B+1=3Unlock(B)Write(A)CommitUnlock(x),T2Slock(A)等待等待等待等待Read(A):A=3Xlock(B)B=A+1=4Write(B)CommitUnlock(A)Unlock(x),加锁阶段,解锁阶段,遵守两段锁协议的可串行化调度,8.2 并发控制概述(续),T1Slock(B)Read(B):B=2Xlock(A)等待等待,T2Slock(A)Read(A):A=2Xlock(B)等待等待,加锁阶段,遵守两段锁协议的并发调度可能产生死锁的情况,虽然两段锁协议与一次封锁法不同,不需要一次将所有需要的数据全部加锁,但是由于加锁和解锁分成了两个阶段,

15、也会导致死锁的产生。,8.2 并发控制概述(续),12、封锁粒度封锁对象的大小称为封锁粒度。封锁的对象可以是逻辑单元,如数据项、元组、关系、索引、数据库等;也可以是物理单元,如页、块、物理记录等。封锁的粒度越大,数据库所能够封锁的数据单元就越少,并发度越小,系统开销也小;反之,封锁的粒度越小,并发度越高,系统开销也越大。,8.2 并发控制概述(续),13、多粒度封锁一个DBMS系统中同时支持多种封锁粒度供不同的事务选择是比较理想的,这种封锁方法称为多粒度锁(Multiple Granularity Locking)。选择封锁粒度应同时考虑封锁开销和并发度两个因素,适当选择封锁粒度以求得到最优的

16、效果。,8.2 并发控制概述(续),13、多粒度封锁多粒度树多粒度树的根结点是整个数据库,表示最大的数据粒度。叶结点表示最小的数据粒度。,多粒度封锁协议允许多粒度树中的每个结点可以被独立的加锁,对一个结点的加锁意味着这个结点的所有后裔结点也被加上了相同类型的锁。多粒度封锁在对数据对象进行封锁时即要检查显示封锁,也要检查隐式封锁。导致效率较低。,8.2 并发控制概述(续),14、意向锁意向锁表示对某个数据对象进行加锁,必须先对其上层结点加意向锁。常用的三种意向锁:IS(意向共享锁):对一个数据对象加IS,表示其后裔要加S锁。IX(意向排他锁):对一个数据对象加IX,表示其后裔要加X锁。SIX(共

17、享意向排他锁):对一个数据对象加SIX,表示其后裔要先加S,再加IX。,8.3 数据库备份与恢复,数据库恢复操作是指在系统出现故障时,由系统管理员或数据库所有者利用数据库备份和日志备份恢复系统或用户数据库。数据库恢复的目标是使之恢复到故障发生之前数据库最后的完整性状态。,8.3 数据库备份与恢复(续),1、故障种类事务内部故障事务由于自身原因未能达到预期的终点。有的情况是可预期的,有些情况是不可预期的。例如:银行转帐事务,把一笔金额从帐户A转移到帐户B,如果帐户A的存款不够,该事务就必须撤消。这个事务是可预期的,可通过应用程序解决。让事务回滚,撤销已作的修改,恢复数据库到正确状态。由于发生死锁

18、而导致对事务的撤销或者违反了数据库的完整性要求等故障属于不可预期的故障。因此对此类事务必须强制ROLLBACK,以保证数据库的一致性。,8.3 数据库备份与恢复(续),1、故障种类系统故障是指造成系统停止运转的任何事件,使得系统要重新启动。一般情况下是由于特定的硬件错误(如CPU故障)、操作系统故障、DBMS代码错误等。解决方法:恢复系统必须在系统重新启动的时候让所有非正常终止的事务回滚,强行撤销所有未完成的事务。恢复系统要重作所有提交的事务,将数据库恢复到一致的状态。,8.3 数据库备份与恢复(续),1、故障种类介质故障存储介质故障是指由于猛烈地碰撞使存储设备发生故障。此类故障的破坏性最大。

19、计算机病毒人为的故障或破坏。,8.3 数据库备份与恢复(续),总结数据库的故障主要是两大类:数据库被破坏数据库中的数据处于不一致的状态 采用数据库恢复技术解决数据库的故障,其本质是:数据冗余,8.3 数据库备份与恢复(续),2、恢复的实现技术恢复机制的关键问题:1)如何建立冗余数据?2)如何利用冗余数据实施数据库恢复?建立冗余数据的技术:1)数据转储2)登录日志文件,8.3 数据库备份与恢复(续),2、数据转储转储是数据库恢复采取的最基本技术。转储分为静态转储和动态转储。静态转储通常选择数据库正处于完整性状态的适当时机,即在没有更新事务执行时,把整个数据库转储到其它介质上。动态转储是指转储期间

20、允许对数据库进行存取或修改,即转储和用户事务可以并发执行。必须将转储期间事务的活动记录下来,建立日志文件。,P1,P2,P3,P4为4个事务P1事务在转储前就已提交,无须重做;P2为发生故障前就已经正常提交的事务,恢复时必须重做P2事务;P3,P4是未提交的事务,事务被撤销。,P1,P2,P3,P4为4个事务P1事务在转储前就已提交,无须重做;P2为发生故障前就已经正常提交的事务,恢复时必须重做P2事务;P3,P4是未提交的事务,事务被撤销。,恢复时必须用备份数据和日志文件共同恢复。,8.3 数据库备份与恢复(续),2、数据转储根据转储的数据,又可分为海量转储和增量转储。海量转储:每次转储全部

21、数据库。增量转储:只转储上一次转储后更新过的数据。,8.3 数据库备份与恢复(续),3、登记日志文件日志文件是用来记录事务对数据库的更新操作的文件。所有事务的更新日志都放在同一个日志文件中。日志文件中需要登记的内容:事务的开始标记。事务的结束标记。事务对数据库的更新操作。包括:事务的标识,操作的类型,操作的对象,更新前数据的值,更新后数据的值。这些均做为日志文件的一个日志记录。,8.3 数据库备份与恢复(续),3、登记日志文件登记日志文件必须遵循的原则:登记的次序严格按照并发事务执行的时间次序必须先写日志文件,再写数据库,8.3 数据库备份与恢复(续),4、恢复策略事务故障的恢复反向扫描日志文

22、件,查找该事务的更新操作对该事务的更新操作做逆向操作直至该事务的开始标记,事务故障恢复结束,8.3 数据库备份与恢复(续),4、恢复策略系统故障的恢复正向扫描日志文件,找出所有已提交的事务,记入重做队列;找出所有未提交事务,记入撤销队列;对撤销队列的操作做撤销处理;对重做队列的操作做重做处理。,8.3 数据库备份与恢复(续),4、恢复策略介质故障的恢复装入最新的备份,使数据库恢复到最近一次转储时的状态;动态转储的还需加入动态转储时的日志文件;利用日志文件对已完成的事务进行重做,对未完成的事务进行撤销。,8.3 数据库备份与恢复(续),5、数据库镜像数据库镜像是指DBMS自动把整个数据库或其中的关键数据复制到另一个磁盘上。当主数据库更新时,DBMS自动把更新后的数据复制过去,保证镜像数据与主数据库的一致性。出现故障时,可用镜像数据自动进行数据库的恢复。没有出现故障时,还可以用于并发操作,即当一个用户对数据加排它锁时,其他用户可以读镜像数据库上的数据。,8.4 小结,事务的四个基本特性并发控制的三类不一致性并发控制的调度数据库故障的种类数据库恢复的基本技术,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号