快照隔离集未反映更改。

5

当我运行 - SET TRANSACTION ISOLATION LEVEL SNAPSHOT - 命令成功执行,但下面的查询返回:

SELECT is_read_committed_snapshot_on,
       snapshot_isolation_state_desc,
       snapshot_isolation_state
FROM   sys.databases
WHERE  name = 'MyDB' 

输出:

is_read_committed_snapshot_on   0
snapshot_isolation_state_desc   OFF 
snapshot_isolation_state        0

请问为什么“SET TRANSACTION”命令没有生效?此外,我假设“ALLOW_SNAPSHOT_ISOLATION”已经打开了,因为我的“SET TRANSACTION ISOLATION LEVEL SNAPSHOT”命令已经成功运行了。这是否正确?

1个回答

13

对于该数据库,快照隔离未开启。

如果您尝试运行该数据库的查询,则会收到此消息。

由于该数据库不允许使用快照隔离,在访问数据库“MyDB”时快照隔离事务失败。请使用 ALTER DATABASE 允许快照隔离。

要启用它,您需要运行:

ALTER DATABASE MyDB SET ALLOW_SNAPSHOT_ISOLATION ON;

谢谢。当我运行 SET TRANSACTION ISOLATION LEVEL SNAPSHOT 时,我没有收到任何这样的消息。它成功运行了。这就是为什么我感到困惑。 - Krishna
@Ikrishs - 这不是一个错误。SET TRANSACTION ISOLATION LEVEL SNAPSHOT; SELECT * FROM master..spt_monitor 可以正常工作,因为该事务不会触及禁用的数据库中的任何内容。 - Martin Smith
感谢您。仅在选择语句后它会抛出以下错误:“访问数据库'xyz'时快照隔离事务失败,因为此数据库不允许使用快照隔离。请使用ALTER DATABASE来允许快照隔离。”因此,Set Transaction Snapshot将不会检查Allow_Snapshot_On是否已开启。 - Krishna
@martinsmith 谢谢,太棒了!+1 对我来说这是个大问题,我已经面对了三个小时。ALTER DATABASE MyDB SET ALLOW_SNAPSHOT_ISOLATION ON; 是行得通的。 - Imran Ali Khan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接