【问题标题】:How do SQL Server isolation levels work with views?SQL Server 隔离级别如何与视图一起使用?
【发布时间】:2016-09-30 00:01:11
【问题描述】:

我有一个带有Set Allow Snapshot Isolation = TRUE 的 SQL Server 2012 数据库。我们就叫它DBSnap吧。

我有另一个带有Set Allow Snapshot Isolation = FALSE 的数据库。我们就叫它DBRead吧。

DBSnap 中,我为DBREAD 中的表创建了一个视图(为了便于参考,我使用了相同的名称):

Create View DBReadTable 
as 
    Select * 
    from DBRead.dbo.DBReadTable.

如果我执行以下命令,它们会失败:

set transaction isolation level snapshot

Select * 
from DBRead.dbo.DBReadTable

错误:

消息 3952,第 16 级,状态 1,第 2 行
快照隔离事务访问数据库“DBRead”失败,因为此数据库中不允许快照隔离。使用 ALTER DATABASE 允许快照隔离。

但是,如果我执行这些命令,基本上是在 DDSnap 中以视图形式访问 DBRead 数据库中的表:

set transaction isolation level snapshot

Select * 
from DBSnap.dbo.DBReadTable

有效。

在第二种情况下实际发生了什么?

DBSnap 是否对DBRead 中的表进行行版本控制(即DNSnap 视图是否有行版本信息)?

或者是在表DBRead上放置了锁?

谢谢,

格雷姆·布莱克

【问题讨论】:

    标签: sql-server isolation-level


    【解决方案1】:

    我无法最终重现这一点。当然,我运行的是 SQL Server 2016 而不是 2012。我尝试按照您的建议创建视图,但收到的错误与我直接查询数据库一样。

    Msg 3952, Level 16, State 1, Line 2
    Snapshot isolation transaction failed accessing database 'DBRead' because snapshot isolation is not allowed in this database. Use ALTER DATABASE to allow snapshot isolation.
    

    以下 MSDN 引用似乎表明您描述的行为不应发生:

    如果使用 SNAPSHOT 隔离级别的事务访问多个数据库中的数据,则必须在每个数据库中将 ALLOW_SNAPSHOT_ISOLATION 设置为 ON。

    (来自https://msdn.microsoft.com/en-us/library/ms173763(v=sql.110).aspx

    您可以尝试从两个新数据库开始,在其中一个中启用快照隔离,然后按照上述过程查看是否得到相同的结果。如果是这样,请保存您使用的 SQL 并更新您的问题。这样其他人可能会更幸运地复制您的情况。

    【讨论】:

      【解决方案2】:

      抱歉,我的帖子不正确。我没有意识到我用来测试的视图中嵌入了 (NOLOCK),从而覆盖了快照。

      【讨论】:

      • 这确实回答了另一个有关如何在支持和不支持快照隔离的数据库之间加入的相关问题。事务级别隔离可以被表级别提示覆盖,例如 (NOLOCK) 或 (READCOMMITTED) 以允许连接工作。表中具有快照隔离的查询部分将使用行版本控制(即,您可以在该表中插入一行而不会被锁定),而具有表提示的部分将遵循指定的任何隔离级别。这是在连接中“混合”隔离级别的好方法。
      • 我没有想到这个,这是一个非常有趣的解决方案!在使用表提示查询视图时,我可以让它工作,但由于某种原因提示在视图内时不能。我想知道它是否可能取决于 SQL Server 是否决定遵循提示。总之,谢谢分享!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 2010-11-10
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多