《事务与锁》ppt课件

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

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

1、第9章 事 务 与 锁,9.1 事 务,9.1.1 事务的概念 事务是并发控制的基本单位。所谓事务,就是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。,如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚,则所有数据修改均被清除。,SQL Server以下列事务模式运行。 (1)自动提交事务 每条单独的语句都是一个事务。 (2)显式事务 每个事务均以BEGIN TRANSACTION语句显式开始,以COMMIT或ROLLBACK语句显式结束。,(3)隐式事务 在前一个事务完成时新事务隐式启动,但每个

2、事务仍以COMMIT或ROLLBACK语句显式完成。,(4)批处理级事务 只能应用于多个活动结果集(MARS),在MARS会话中启动的Transact-SQL显式或隐式事务变为批处理级事务。,9.1.2 事务的特性,原子性 一致性 隔离性 持久性,9.1.3 事务控制语句,所有的T-SQL语句都是内在的事务。SQL Server 2005还包括事务控制语句,将SQL Server语句集合分组后形成单个的逻辑工作单元。,1BEGIN TRANSACTION语句,BEGIN TRANSACTION语句标记一个显式本地事务的起始点,即事务的开始。 其语法格式为: BEGIN TRAN | TRANS

3、ACTION transaction_name | tran_name_variable WITH MARK description ,其中各参数的含义如下。 transaction_name是事务名。 tran_name_variable是用户定义的、含有有效事务名称的变量,该变量必须是字符数据类型。 WITH MARK指定在日志中标记事务。 description是描述该标记的字符串。,2COMMIT TRANSACTION语句,COMMIT TRANSACTION语句标志一个成功的隐式事务或显式事务的结束。 其语法格式为: COMMIT TRAN | TRANSACTION transa

4、ction_name | tran_name_variable ,3ROLLBACK TRANSACTION语句,ROLLBACK TRANSACTION语句将显式事务或隐性事务回滚到事务的起点或事务内的某个保存点。其语法格式为: ROLLBACK TRAN | TRANSACTION transaction_name | tran_name_variable | savepoint_name | savepoint_variable ,其中,参数transaction_name和tran_name_variable的含义与BEGIN TRANSACTION语句中一样。 savepoint_n

5、ame是SAVE TRANSACTION语句中设置的保存点,当条件回滚只影响事务的一部分时,可使用savepoint_name。,savepoint_variable是用户定义的、包含有效保存点名称的变量名。,4SAVE TRANSACTION语句,SAVE TRANSACTION语句在事务内设置保存点。其语法格式为: SAVE TRAN | TRANSACTION savepoint_name | savepoint_variable 其中,参数savepoint_name和savepoint_variable的含义与ROLLBACK TRANSACTION语句中的一样。,9.1.4 分布式

6、事务,当一个事务分散在多个服务器上时,它就是分布式事务。 分布式事务跨越两个或多个称为资源管理器的服务器,称为事务管理器的服务器组件必须在资源管理器之间协调事务管理。,9.2 锁,9.2.1 锁的概念 锁定是Microsoft SQL Server Database Engine用来同步多个用户同时对同一个数据块的访问的一种机制。 通过锁机制,可以防止脏读、不可重复读和幻觉读。,9.2.2 锁的类型,Microsoft SQL Server Database Engine使用不同的锁模式锁定资源,这些锁模式确定了并发事务访问资源的方式。 (1)共享锁 共享锁也称为S锁,允许并行事务读取同一种资

7、源,这时的事务不能修改访问的数据。当使用共享锁锁定资源时,不允许修改数据的事务访问数据。,(2)排他锁 排他锁也称为X锁,它可以防止并发事务对资源进行访问。 (3)更新锁 更新锁也称为U锁,它可以防止常见的死锁。更新锁用来预定要对资源施加锁,它允许其他事务读,但不允许再施加锁或锁。,(4)意向锁 数据库引擎使用意向锁来保护共享锁(S锁)或排他锁(X锁),放置在锁层次结构的底层资源上。,(5)架构锁 执行表的数据定义语言(DDL)操作(例如添加列或删除列)时使用架构修改锁(Sch-M锁)。在架构修改锁(Sch-M锁)起作用的期间,会防止对表的并发访问。,(6)大容量更新锁 当将数据大容量复制到表

8、,且指定了TABLOCK提示或者使用sp_tableoption设置了table lock on bulk表选项时,将使用大容量更新锁(BU锁)。,(7)键范围锁 在使用可序列化事务隔离级别时,对于Transact-SQL语句读取的记录集,键范围锁可以隐式保护该记录集中包含的行范围。,9.2.3 锁的使用,Microsoft SQL Server Database Engine具有多粒度锁定,允许一个事务锁定不同类型的资源。为了尽量减少锁定的开销,数据库引擎自动将资源锁定在适合任务的级别。锁定在较小的粒度(例如行)可以提高并发度,但开销较高,因为如果锁定了许多行,则需要持有更多的锁。,锁定在较

9、大的粒度(例如表)可以降低并发度,因为锁定整个表限制了其他事务对表中任意部分的访问,但其开销较低,因为需要维护的锁较少。,9.2.4 死锁,在两个或多个任务中,如果每个任务锁定了其他任务试图锁定的资源,此时会造成这些任务永久阻塞,从而出现死锁。,除非某个外部进程断开死锁,否则死锁中的两个事务都将无限期等待下去。 Microsoft SQL Server Database Engine死锁监视器定期检查陷入死锁的任务。如果监视器检测到循环依赖关系,将选择其中一个任务作为牺牲品,然后终止其事务并提示错误。,尽管死锁不能完全避免,但遵守以下特定的编码惯例可以将发生死锁的机会降至最低。 (1)按同一顺序访问对象 (2)避免事务中的用户交互 (3)保持事务简短并处于一个批处理中,(4)使用较低的隔离级别 (5)使用基于行版本控制的隔离级别 (6)使用绑定连接,

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

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

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