SQL Server 复制本地订阅属性返回“无法将值‘null’应用于属性 ServerInstance:值不能为空。”

Posted

技术标签:

【中文标题】SQL Server 复制本地订阅属性返回“无法将值‘null’应用于属性 ServerInstance:值不能为空。”【英文标题】:SQL Server Replication Local Subscription Properties returns "Cannot apply value ‘null’ to property ServerInstance: Value cannot be null." 【发布时间】:2016-12-04 09:32:18 【问题描述】:

我正在将 SQL 2008 R2 数据库复制到 SQL 2016 数据库。

当我使用 SSMS 连接到 SQL 2016 数据库时,在对象资源管理器中 选择复制->本地订阅->我的订阅然后右键单击并选择属性我得到错误“无法将值'null'应用于属性ServerInstance:值不能为空。”。

这是什么意思,我该如何解决?我使用我的 Windows 域用户登录,该用户在两个系统上都是系统管理员。

【问题讨论】:

我对 SQL 2016 > SQL 2016 设置有同样的问题。 【参考方案1】:

从 SQL 2016 开始,引入了更改以支持 Tran 复制的内存优化订阅者。 SSMS 中的此错误是该更改的回归。

在订阅属性表单中,添加了一个新条目以显示它是否为内存优化订阅。此信息是从分发服务器获取的。

因此,对于推送订阅,如果订阅者是 SQL 2016 或更高版本,如果您尝试从订阅服务器查看订阅属性,则分发服务器返回为 NULL,因为它无法访问/连接到分发服务器.这就是您收到此错误的原因。

在解决此问题之前,您可以从发布者端查看订阅属性。

【讨论】:

嗨@Madhan,您能否提供指向任何有关此错误的文档的链接?谢谢:) 虽然微软没有官方文档证实这一点,但我们最近在测试 SSMS 以进行另一项改进时发现了这个错误。【参考方案2】:

我刚刚遇到了同样的问题,我的复制发布者和分发者在 SQL Server 2014 上,而我的订阅者是 SQL Server 2016。当我尝试使用 SSMS 2016 时,我遇到了同样的问题,但是当我使用 SSMS 2014 时,一切正常,所以这很可能是因为 SSMS 的版本。尝试使用发布者(源)正在使用的 SSMS 版本。

【讨论】:

【参考方案3】:

当所有服务器都在同一版本的 SQL 上时,我遇到了这个问题。我在某处读到,如果分发者和发布者(以及订阅者取决于复制类型)之间存在三个以上版本的 SQL,复制将无法工作,但我通过对数据库使用较低的兼容性级别来解决这个问题。

在我当前的设置中,一切都是 SQL 2016。我遇到了同样的问题,并通过为订阅者上的分发者和发布者创建链接服务器来修复它。这些应该是在设置过程中创建的,所以我不确定为什么没有。

我从发行商那里编写了链接服务器 repl_distributor 以及发布者的链接服务器的脚本,然后在订阅者上运行这些脚本。这样就解决了这个问题。

我希望这也适用于你(虽然你的问题是很久以前的,所以你现在可能没事了!)。

【讨论】:

【参考方案4】:

检查链接服务器的“服务器选项”选项卡。在这里您指定分发者、发布者和订阅者。确保在适合您的设置的情况下将这些设置为 true。如果这些选项都设置为 false 就像我使用所有 SQL 2016 的情况一样,您可能会收到此错误,因为它无法连接到分发服务器。

【讨论】:

【参考方案5】:

根据 SSMS 17.4 的 change log(2017 年 12 月 14 日发布),此错误现已针对 PULL 订阅修复。

【讨论】:

【参考方案6】:

来自这个Connect item,解决方法似乎是..

1.在windows box上添加用户为本地管理员 2.以管理员身份运行SSMS..

【讨论】:

我从链接中添加了相关部分,我不知道为什么这被否决了

以上是关于SQL Server 复制本地订阅属性返回“无法将值‘null’应用于属性 ServerInstance:值不能为空。”的主要内容,如果未能解决你的问题,请参考以下文章

sql server 本地复制订阅 实现数据库服务器 读写分离

sql server 本地复制订阅 实现数据库服务器 读写分离

SQL Server Replication—本地发布订阅配置

怎样设置sql server2012中的订阅

SQL Server 2012本地发布订阅及相关问题的解决方案

SQL Server提高事务复制效率优化订阅初始化优化