SNAPSHOT 隔离级别的远程查询

Vla*_*adV 11 sql-server-2005 sql-server snapshot

我正在试验快照隔离级别。每当我尝试访问链接服务器时,都会收到错误消息:

事务隔离级别“快照”不支持远程访问

关于这个问题,我在 BOL 或 Google 中找不到任何有意义的信息。

限制似乎相当令人沮丧。除了在本地缓存所有远程数据之外,是否有解决方法?

Mar*_*ith 10

如果深入了解 SQL Server 中如何实现快照隔离的内部结构,不支持远程访问的原因就很清楚了。

启用快照隔离后,最多 14 字节的版本信息会附加到修改的每一行。附加字节包含修改行的事务的事务序列号,以及指向 tempdb 中版本化行的指针。

在快照隔离下运行的事务将看到在它开始时存在的行的版本(在执行第一条语句时存在,而不是BEGIN TRAN)。它是用于标识版本存储中正确版本的事务序列号。由于本地和远程服务器上的序列号之间没有相关性,远程服务器不可能检索到正确的版本。

毫无疑问,SQL Server 到 SQL Server 的连接可以通过多种方式管理第一个问题,如果 SQL 开发团队认为值得这样做的话。但是还有第二个问题,您将如何处理从版本存储中删除版本?

负责清理的后台进程再次使用事务序列号来确定是否仍需要行版本。这仅需要识别最旧的运行事务序列号并删除任何比这更旧的版本。使用远程连接......听起来很难看,这就是它不受支持的原因。

是否可以采取不同的方法,也许是强制执行REPEATABLE READSERIALIZABLE远程连接?不,这会影响一致性,因为在本地事务开始时无法锁定远程服务器上的行。您不能依赖这种行为,从而影响 ACID 合规性。

行版本控制资源使用SQL Server 2005 基于行版本控制的事务隔离包含大部分重要细节。

如何最好地解决此问题取决于您要实现的目标。如果您可以扩展您的特定场景,我们可以探索替代方法。