首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SERVER 2008 R2事务快照隔离级别无法按预期工作

SERVER 2008 R2事务快照隔离级别无法按预期工作
EN

Stack Overflow用户
提问于 2013-04-04 17:19:49
回答 1查看 4.3K关注 0票数 4

我创建了一个名为“test_isolation”的数据库,并使用数据创建了一个表“person”

代码语言:javascript
复制
name    age
----    ---
test1    1
test2    2
test3    3
test4    4
test5    5
test6    6

现在对数据库进行了修改,允许在session1中进行快照隔离。

代码语言:javascript
复制
ALTER DATABASE test_isolation
SET ALLOW_SNAPSHOT_ISOLATION ON
GO 

现在我在会话2中创建一个事务

代码语言:javascript
复制
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
GO
BEGIN TRAN
SELECT * FROM PERSON
GO
DELETE FROM PERSON WHERE name = 'test6'
GO
SELECT * FROM PERSON
GO

结果与预期相符。(请注意,我们尚未提交此事务!)

现在我在会话3中执行以下查询

代码语言:javascript
复制
SELECT * FROM PERSON

会话3中的查询继续无限地运行,这意味着表已被锁定。

如果我回到会话2并提交事务..。我能够在会话3上运行查询,结果和预期的一样。

事务隔离级别快照不应该锁定表,对吗?我是不是做错了什么,还是我对事务快照隔离的理解是错误的?

请帮忙..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-04 17:36:43

您必须在第三会话中显式声明SET TRANSACTION ISOLATION LEVEL SNAPSHOT,否则会话3仍将作为READ_COMMITTED操作并阻止更新。

还可以在数据库级别设置此选项,以便用快照替换READ_COMMITTED。

代码语言:javascript
复制
ALTER DATABASE MyDatabase
SET READ_COMMITTED_SNAPSHOT ON
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15817664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档