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 READ或SERIALIZABLE远程连接?不,这会影响一致性,因为在本地事务开始时无法锁定远程服务器上的行。您不能依赖这种行为,从而影响 ACID 合规性。
行版本控制资源使用和SQL Server 2005 基于行版本控制的事务隔离包含大部分重要细节。
如何最好地解决此问题取决于您要实现的目标。如果您可以扩展您的特定场景,我们可以探索替代方法。
| 归档时间: |
|
| 查看次数: |
5352 次 |
| 最近记录: |