《事务管理》ppt课件

上传人:tia****nde 文档编号:67812626 上传时间:2019-01-09 格式:PPT 页数:86 大小:376.31KB
返回 下载 相关 举报
《事务管理》ppt课件_第1页
第1页 / 共86页
《事务管理》ppt课件_第2页
第2页 / 共86页
《事务管理》ppt课件_第3页
第3页 / 共86页
《事务管理》ppt课件_第4页
第4页 / 共86页
《事务管理》ppt课件_第5页
第5页 / 共86页
点击查看更多>>
资源描述

《《事务管理》ppt课件》由会员分享,可在线阅读,更多相关《《事务管理》ppt课件(86页珍藏版)》请在金锄头文库上搜索。

1、第8章 事务管理,事 务 并发控制 恢 复,事 务,事务的概念 事务的性质 可串行性和隔离级别 SQL对事务的支持,事务的概念,事务是构成单一逻辑工作单元的操作集合。 为什么需要事务的概念呢? 恢复的需要 并发操作的需要,事务的性质,原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability),事务的这些性质通常称为ACID特性,原子性,事务的原子性强调了一个事务是一个逻辑工作单元,是一个整体,是不可分割的。一个事务所包含的操作要么全部做,要么全部不做。,一致性,一个事务执行一项数据库操作,事务将使数据库从一种一致性的状态变换成另

2、一种一致性状态。 在事务执行前,总是假设数据库是一致的,那么当事务成功执行后,数据库肯定仍然是一致的。,隔离性,如果每个事务单独执行能保持原子性和一致性,这些事务并发执行也能保持原子性和一致性,则是事务的隔离性。,持久性,事务的持久性是指一旦事务成功完成,该事务对数据库所施加的所有更新都是永久的。,可串行性,可串行性通常看作是多个事务并发执行的正确性准则。具体判定方法如下: 各单个事务如能将数据库从一个正确状态转变为另一个正确状态,则认为该事务是正确的; 按任何一个串行顺序依次执行多个事务也是正确的(这里的串行顺序假定各个事务间彼此独立、不交叉); 事务的交叉执行过程是正确的,当且仅当其与串行

3、执行过程等价,则事务是可串行化的。,隔离级别,隔离性虽然是事务的基本性质之一,但是彻底的隔离意味着并发操作效率的降低。所以人们设想在避免干扰的前提下,适当地降低隔离的级别,从而提高并发的操作效率。隔离级别越低,并发操作的效率越高,但是产生干扰的可能性也越大;隔离级别越高,则并发操作的效率越低,同时产生干扰的可能性也越小。在设计应用时,可以在所能容忍的干扰程度范围内,尽可能的降低隔离级别,从而提高应用的执行效率。,隔离级别,在SQL标准中定义了下列四种隔离级别,SQL Server支持所有这些隔离级别: 未提交读(READ UNCOMMITTED):事务隔离的最低级别,仅可保证不读取物理损坏的数

4、据,这是四个隔离级别中限制最小的级别。 提交读(READ COMMITTED):SQL Server默认级别,可以保证不读取“脏”数据。 可重复读(REPEATABLE READ):可以保证读一致性,避免不一致分析问题。 可串行化(SERIALIZABLE):事务隔离的最高级别,事务之间完全隔离;如果事务在可串行化隔离级别上运行,则可以保证任何并发重叠事务均是串行的。,隔离级别,四种隔离级别所允许的不同类型的行为,事务必须运行于可重复读或更高的隔离级别才可以防止丢失更新。,隔离级别,设置隔离级别的命令是: SET TRANSACTION ISOLATION LEVEL READ COMMITT

5、ED | READ UNCOMMITTED | REPEATABLE READ | SERIALIZABLE ,SQL对事务的支持,开始事务 结束事务 事务保存点 隐含事务与自动提交,开始事务,使用BEGIN TRANSACTION命令显式说明一个事务开始,它说明了对数据库进行操作的一个单元的起始点。在事务完成之前出现任何操作错误和故障,都可以撤销事务,使事务回退到这个起始点。,结束事务,成功结束事务的命令是COMMIT TRANSACTION,它的作用是提交或确认事务已经完成,所以该命令也称作事务提交。 撤消事务的命令是ROLLBACK TRANSACTION,即撤消在该事务中对数据库所做的

6、更新操作,使数据库回退到事务的起始点。,事务保存点,SQL标准还支持“事务保存点”技术,所谓事务保存点就是在事务的过程中插入若干标记,这样当发现事务中有操作错误时,可以不撤消整个事务,只撤消部分事务,即将事务回退到某个事务保存点。,事务保存点,SQL Server支持事务保存点技术,设置保存点的命令是SAVE TRANSACTION(在SQL标准中是SAVEPOINT命令),具体格式是: SAVE TRANSACTION savepoint_name 撤消部分事务或回退到事务保存点的命令也是ROLLBACK TRANSACTION,具体格式是: ROLLBACK TRANSACTION sav

7、epoint_name,事务保存点,在SQL标准中还支持取消事务保存点的命令RELEASE SAVEPOINT,在SQL Server目前的版本中不支持取消事务保存点。,隐含事务与自动提交,SQL标准规定事务的开始是隐含的,在发出COMMIT(提交事务)或ROLLBACK(撤消事务)命令之前,该事务将一直保持有效。一个事务被提交或撤消之后,又将自动启动下一个新事务。,隐含事务与自动提交,SQL Server也可以设置成隐含事务方式,设置隐含事务方式的命令是: SET IMPLICIT_TRANSACTIONS ON 取消隐含事务方式的命令是: SET IMPLICIT_TRANSACTIONS

8、 OFF,隐含事务与自动提交,当是隐含事务方式时,不需要用BEGIN TRANSACTION命令显式的启动或开始一个事务,但需要用COMMIT或ROLLBACK命令结束事务; 当是非隐含事务方式时,如果没有用BEGIN TRANSACTION命令显式的启动或开始一个事务,则每条操作数据库的语句都将作为独立的事务被自动提交或撤消,这时候不需要、也不能执行COMMIT或ROLLBACK命令。,并发控制,干扰问题 解决干扰封锁 封锁不当死锁 封锁与隔离级别,干扰问题,丢失更新问题 未提交依赖问题 不一致分析问题 幻象读问题,丢失更新问题,例: 旅客A来到A售票处,要买一张15日北京到上海的13次直达

9、快速列车的软卧车票,售票员A(下称用户A)在终端A查看剩余票信息; 几乎在同时,旅客B来到B售票处,也要买一张15日北京到上海的13次直达快速列车的软卧车票,售票员B(下称用户B)从终端B查到了同样的剩余票信息; 旅客A买了一张15日13次7车厢5号下铺的软卧票,用户A更新剩余票信息并将它存入数据库; 这时用户B不知道用户A已经将15日13次7车厢5号下铺的软卧票卖出,使旅客B也买了一张15日13次7车厢5号下铺的软卧票,用户B更新剩余票信息并将它存入数据库(重复了用户A已经做过的更新)。,总的效果:15日13次7车厢5号下铺的软卧票卖了两次。其原因是:允许了用户B在过时的信息基础上去更新数据

10、库,而没有迫使他去看最新的信息。,丢失更新问题,用SQL术语描述丢失更新问题,未提交依赖问题,未提交依赖问题也称为读“脏”(Dirty Read)数据问题,查询一个已经被其他事务更新、但尚未提交的元组,将会引起未提交依赖问题。,不一致分析问题,不一致分析问题也称为不可重复读问题,很多应用可能需要校验功能,这时往往需要连续两次或多次读数据进行校验和分析,结果由于其他事务的干扰,使得前后结果不一致,从而产生校验错误(即不一致的分析)。,幻象读问题,幻象读问题与不一致分析问题有关,当事务A读数据时,事务B在对同一个关系进行插入或删除操作,这时事务A再读同一条件的元组时,会发现神秘地多出了一些元组或丢

11、失了一些元组,把这种现象称作幻象读。,封锁,封锁的基本技术 封锁机制 SQL Server中与封锁有关的命令 封锁粒度 意向锁,封锁的基本技术,当需要查询或更新数据时,先对数据进行封锁,以避免来自其他事务的干扰。针对不同的干扰问题可以有不同的封锁机制。 以丢失更新问题为例,实施封锁的基本思想是:当一个用户对一个表或记录进行更新时,封锁该表或记录,使其他用户不能在同一时刻更新相同的表或记录,迫使其他用户在更新后的基础上(而不是在更新前的基础上)再实施另外的更新操作。,封锁的基本技术,实施封锁以后的时间序列,封锁机制,共享封锁 独占封锁 更新封锁,有些封锁在执行完相应操作后就自动释放封锁,有些封锁

12、则保持到事务结束(提交或撤消)时才释放(无论如何,所有的封锁都会在事务结束时自动释放)。,共享封锁,共享封锁是为读操作设置的一种封锁,所以也称作读封锁,或简称S锁,目的是想读到一组不变的数据,也就是在读数据的过程中,不允许其他用户对该数据进行任何修改操作。这种封锁可以保证最大的并发性,任何数量的用户都可以同时对同样的数据施加这种共享锁。已经实施共享锁的表拒绝来自其他事务的独占封锁和更新封锁。,独占封锁,独占封锁也叫排他封锁,它是为修改操作设置的一种封锁,也称为写封锁,或简称为X锁,这是最严格的一类封锁。当需要对表实施插入、删除或修改操作时,应该使用独占封锁。已经实施独占封锁的表,拒绝来自其他用

13、户的任何封锁,但不拒绝一般的查询操作。,更新封锁,当需要对一个记录或一组记录进行更新时(只是修改,不包括插入和删除)使用更新封锁,该封锁的目的是防止其他用户在同一时刻修改同一记录。已经实施更新封锁的记录,拒绝来自其他用户的任何封锁,但不拒绝一般的查询操作。,SQL Server中与封锁有关的命令,SQL Server的封锁操作是在相关语句的“WITH ()”子句中完成的,该短语可以在SELECT、INSERT、UPDATE和DELETE等语句中指定表级锁定的方式和范围。,SQL Server中与封锁有关的命令,常用的封锁关键词有: TABLOCK:对表施行共享封锁,在读完数据后立刻释放封锁,此

14、类封锁可以避免读“脏”数据,但不具有可重复读的特性。 HOLDLOCK:与TABLOCK一起使用,可将共享锁保留到事务完成,而不是在读完数据后立即释放锁,这样可以保证数据的可重复独特性。 NOLOCK:不进行封锁,此关键词仅应用于SELECT语句,这样可能会读取未提交事务的数据,即有可能发生“脏”读。 TABLOCKX:对表实施独占封锁。 UPDLOCK:对表中的指定元组实施更新封锁;这时其他事务可以对同一表中的其他元组也实施更新封锁,但是不允许对表实施共享封锁和独占封锁。,SQL Server中与封锁有关的命令, DECLARE d datetime, t char(6), s char(2

15、), n char(10) BEGIN TRANSACTION SELECT n=座位号 FROM R WITH (UPDLOCK) WHERE 日期 = d AND 车次 = t AND 座别 = s AND 状态 IS NULL IF UPDATE R SET 状态 = “Y“ WHERE 座位号 = n AND 日期 = d AND 车次 = t AND 座别 = s COMMIT TRANSACTION ELSE ROLLBACK TRANSACTION ,封锁粒度,封锁的对象可以是表、也可以是元组等,我们把封锁对象的大小称为封锁粒度(Granularity)。 封锁的对象可以是逻辑单

16、元(如表和元组等),也可以是物理单元(如数据页和数据块等)。 数据库管理系统一般都具有多粒度锁定功能,允许一个事务锁定不同类型的资源。,封锁粒度,锁定在较小的粒度(例如行)可以增加并发操作的性能,但系统开销也较大。这是因为如果封锁的粒度小,则意味着需要的锁多,从而需要系统控制更多的锁。 锁定在较大的粒度(例如表)会降低操作的并发性,这是因为锁定整个表限制了其他事务对表中任意部分进行访问。封锁粒度大,则不需要太多的封锁,由于需要维护的锁较少,所以系统开销较低。,意向锁,为了降低封锁的成本,提高并发的性能,数据库管理系统还支持一种意向锁(Intention Lock)。 意向锁表示一种封锁意向,当需要在某些底层资源上(如元组)获取封锁时,可以先对高层资源(如表)实施意向锁。例如,在表级实施共享意向锁表示事务打算在表中的元组上实施共享锁,这样做可以防止另一个事务随后在同样的资源上获取排它锁。意向锁可以提高性能,因为系统仅在表级检查意向锁来确定事务是否可以安全地获取该表上的

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

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