- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
最近下载
- 《无人机艺术摄影》课件——项目5 无人机拍摄视频.ppt VIP
- HD21.2 S3-1997+A1-2002 额定电压450/750V及以下热塑性绝缘电缆 第2部分:试验方法(中文).pdf VIP
- 基于体卫融合的儿童青少年运动指南(2024) .pdf VIP
- GB_T 18920-2020 城市污水再生利用城市杂用水水质.pdf VIP
- 陀螺仪减震装置及无人机.pdf VIP
- 12J003室外工程(标准图集).docx
- 项目管理办公室PMO实践指南.docx VIP
- 最新医疗器械分类标准目录.pptx VIP
- 风电场项目风机及附属设备吊装工程(混塔风机吊装施工方案).pptx VIP
- DLT 5265_水电水利工程混凝土搅拌楼安全操作规程.pdf VIP
文档评论(0)