并发控制与恢复技术.docVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
并发控制与恢复技术

实验四 并发控制与恢复技术 一、实验目的 掌握利用并发控制技术解决由于并发操作带来的数据不一致性问题。 掌握数据库的恢复技术。 二、实验内容 构造对数据读写造成不一致的操作。 解决由于并发操作引起的数据不一致性问题。 事务故障的恢复。 利用数据库后备副本恢复。 三、实验准备 1.可串行化调度是什么? 2.并发操作可能会带来哪些数据不一致性问题? a.丢失更新(lost update) T1 T2 1、读出A=16 ? 2、 读出A=16 3、A(A-1写回A=15 4、 A(A-1写回A=15 b.读“脏”数据(dirty read) T1 T2 1、读出C=100 C(C*2 写回C ? 2、 读出C=200 3、ROLLBACK C恢复为100 ? 3、 写回C=200 c.不可重复读(non-repeatable read) T1 T2 1、读出A=50 读出B=100 求和=150 ? 2、 读出B=100 B(B*2 3、读出A=50 读出B=200 和=250(验算不对) 上述问题都会引起数据的不一致性。我们把事务准备接受不一致数据的级别称为隔离级别。隔离级别是一个事务必须与其它事务进行隔离的程度。较低的隔离级别可以增加并发,但代价是降低数据的正确性。相反,较高的隔离级别可以确保数据的正确性,但可能对并发产生负面影响。应用程序要求的隔离级别确定了 SQL Server 使用的锁定行为。SQL定义了下列四种隔离级别,SQL Server 支持所有这些隔离级别: READ UNCOMMITTED---未提交读(事务隔离的最低级别,仅可保证不读取物理损坏的数据)。 READ COMMITTED---提交读(SQL Server 默认级别)。 REPEATABLE READ---可重复读。 SERIALIZABLE---可串行读(事务隔离的最高级别,事务之间完全隔离)。 SET TRANSACTION ISOLATION LEVEL ????{ READ COMMITTED ????????| READ UNCOMMITTED ????????| REPEATABLE READ ????????| SERIALIZABLE ????} 3.事务的基本操作要点 a.事务的起始点BEGIN TRAN [ SACTION ] [ transaction_name | @tran_name_variable????… 说明:transaction_name是给事务分配的名称。transaction_name 必须遵循标识符规则,但是不允许标识符多于 32 个字符。仅在嵌套的 BEGIN...COMMIT 或 BEGIN...ROLLBACK 语句的最外语句对上使用事务名。@tran_name_variable是用户定义的、含有有效事务名称的变量的名称。必须用 char、varchar、nchar 或 nvarchar 数据类型声明该变量。 BEGIN TRAN T1 UPDATE table1 ... BEGIN TRAN M2 UPDATE table2 ... SELECT * from table1 COMMIT TRAN M2 UPDATE table3 ... COMMIT TRAN T1 b.提交事务。COMMIT [ TRAN [ SACTION ] [ transaction_name | @tran_name_variable ] ] 下面的示例在图书的截止当前销售额超过 $8,000 时,增加支付给作者的预付款。 BEGIN TRANSACTION USE pubs GO UPDATE titlesSET advance = advance * 1.25 WHERE ytd_sales 8000 GO COMMIT c.ROLLBACK TRANSACTION将事务回滚 语法ROLLBACK [ TRAN [ SACTION ]?[ transaction_name | @tran_name_variable… --创建测试用数据库test CREATE DATABASE testGO --创建测试用表 USE test GO CREATE TABLE 帐户表 (帐号 CHAR(4), 余额 INT ) GO 往表中插入记录 ‘A’,100 ‘B’,200 开启两个查询分析器程序模拟两个并行的事务丢失更新 --在第一个连接中执行以下语句 BEGIN TRAN UPDATE 帐户表 SET 余额=101 WHERE 帐号=‘A’? WAITFOR DELAY ‘00:00:10’ --等待10秒 COMMIT TRA

文档评论(0)

aicencen + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档