【发布时间】: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