实验11数据库并发控制.docx
《实验11数据库并发控制.docx》由会员分享,可在线阅读,更多相关《实验11数据库并发控制.docx(6页珍藏版)》请在三一办公上搜索。
1、实验数据库并发控制实验目的:了解并掌握数据库的保护措施并发控制机制,重点以SOL Server2000为平台加以 操作实践,要求认识典型并发问题的发生现象并掌握解决办法。实验背景:并发操作是数据库共享特性的一个体现,但却对数据库德一致性和完整性形成了巨大的 危机。事务是并发控制的基本单位。SOL Server2000的事务一般分为2类,一种是系统提供的事务,是指在执行语句时,一 条语句就是一个事务;另一种是用户定义的事务,即用户明确定义的事务。在实际应用中大 多数事务需要由用户自己定义事务来出来。用BEGING TRANSACTION定义事务的开始; 用 COMMIT TRANSACTION
2、来成功提交事务;用 ROLLBACK TRANSACTION 将事务 操作全部取消。SOL Server2000采用加锁技术确保事务运行不会影响数据库的一致性和完整性。加锁技 术可以防止用户读取正在由别的用户修改的数据,也可以防止两个用户同时修改同一个数 据。如果没有锁,数据库中的数据可能出现丢失修改、脏读、不可重复读、幻影等并发问题。 虽然SOL Server2000自动强制锁定,但是可以通过了解锁定并在应用程序中自定义锁来设 计更有效的并发控制程序。SOL Server2000提供了如下类型的锁:共享(S)、更新(U)、排它(X)、意向锁、架构 锁、大容量更新(BU),详见联机丛书SQL
3、Server中的锁定介绍。SQL Server 2000具有 多粒度锁定,允许一个事务锁定不同类型的资源。隔离属性是ACID的四个属性之一,逻辑工作单元必须具备这四个属性才能称为事务。 该属性能够使事务免受其它并发事务所执行的更新的影响。每个事务的隔离级别实际上都是 可以自定义的。当锁定技术实施并发控制机制时,使所有事务得以在彼此完全隔离的环境中 运行,但是任何时候都可以有多个正在运行的事务。可串行性保证一组并发事务运行后所达 到的数据库状态,等同于这组事务按某种顺序连续执行时所达到的数据库状态。隔离级别是一个事务必须与其它事务进行隔离的程度。较低的隔离级别可以增加并发, 但代价是降低数据的正
4、确性。相反,较高的隔离级别可以确保数据的正确性,但可能对并发 产生负面影响。设置事务隔离级别虽然使程序员承担了某些完整性问题所带来的风险,但可 以换取对数据更大的并发访问权。SQL-92定义了使用SET TRANSACTION ISOLATION LEVEL语句定义时可以选择的四种隔离级别: READ UNCOMMITTED 未提交读 READ COMMITTED 提交读(SQL Server 默认级别)。 REPEATABLE READ 可重复读。 SERIALIZABLE可串行读(事务隔离的最高级别,事务之间完全隔离)。SET TRANSACTION ISOLATION LEVEL的设置是
5、在执行或运行时设置,而不是在分 析时设置。一次只能设置这些选项中的一个,而且设置的选项将一直对那个连接保持有效, 直到显式更改该选项为止。这是默认行为,除非在语句的FROM子句中在表级上指定优化 选项。如果事务在SERIALIZABLE隔离级别上运行,则可以保证任何并发重叠事务均是串 行的。实验内容:1、丢失修改(lost updates)丢失修改直接影响数据库的正确性,是并发控制首要解决的问题。事务必须运行于可重复读(REPEATABLE READ或者更高的隔离级别才防止丢失修改。当两个事务检索相同 的行,然后基于原检索的值对行进行更新时,会发生丢失更新。如果两个事务使用一个 UPDATE语
6、句更新行,并且不基于以前检索的值进行更新,则在默认的READ COMMITTED隔离级别不会发生丢失修改。步骤1:创建一个实验数据库TEST,并创建表saleso步骤2:创建两个存储过程modi_m和modi_a,语句如图:步骤3:打开两个查询分析器窗口,分别运行两个存储过程modi_m和modi_ao (也可 以利用企业管理器的查询子窗体进行模拟,方法如图)2、llsysco llsysco llsvsde HU sysfile HU sysfiledtpropertiesdbo系统步骤4:可以看到同时运行两个存储过程,就可以实现对“数量”字段加1和减1各2000 次操作,“数量”字段最后应
7、该得到的值是0,但是运算结果不是0。这说明发生了丢失 修改现象。步骤5:修改存储过程modi_m为如图所示,而modi_a也作相应的修改。那么“数量” 字段的值将一直为0。结论:多个进程同时运行,会发生丢失修改的现象。解决的办法是:避免先SELECT 后UPDATE的事务设计;如果必须这样安排事务,则可以指定更高的事务隔离级别, 如:repeatable read或serializable或在事务开始就对数据对象加排它锁(X),如上图语 句:Select shu=数量 from sales with(tablockx) where 客户代号=A0001脏读(dirty read)隔离级别为未提
8、交读(read uncommitted)时,会产生脏读,这表示事物中不发生 共享锁,也不接受排它锁,能读到事务提交前的中间值,即脏数据。步骤1:创建两个存储过程dirt_wroll和dirt_r,注意事先将salse表的数量字段值 更改为1000,如图:CREATE procedure dirt_wroll ASdeclare int创建扃部变量declare shu intset transaction isolation level read uncouunittedselect 1/*翁局部变量赋值_while (i = 16000 begin /* 注释:16000的值可以调节 */潘
9、勇._,select shu:数里 from sales where 客户代w : A0001update sales set 数量 shu 1 where 客户代号:,A000T rollback tranwaitf or delay ? 00: 00: 00. 002, 注释:延退时间可以自行调整CREATE procedure dirt_r ASdeclare i intdeclare shu intset transaction isolation level read uncoimittedselect i 1while(i =6000 beginselect i i 1begin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验11 数据库并发控制 实验 11 数据库 并发 控制
链接地址:https://www.31ppt.com/p-5174821.html