症状
假设你使用 SQL Server 2014 或2016中的 sp_addpublication存储过程创建事务性发布,并将@allow_drop 属性设置为 True。 删除发布中发布的表并手动删除发布中已过时的文章后,可能会收到类似于以下内容的错误消息:
远程服务器 "(null)" 不存在。
例如,在以下情况下会发生此问题:
-
发布事务发布中的表,然后将 @allow_drop 属性设置为 True。
-
删除已发布的表。
-
在日志读取器代理处理与 "删除表" 命令相关的记录之前,使用以下存储过程之一清理已过时的文章:
-
sp_MSdropobsoletearticle
-
sp_droparticle
-
sp_droppublication
-
在这种情况下,将在详细日志中记录以下错误消息:
状态:0,代码:1007,文本: "进程无法在"SQL_SERVER_INSTANCE"上执行" sp_MSadd_replcmds "。进程无法在 "SQL_SERVER_INSTANCE" 上执行 "sp_MSadd_replcmds"。复制代理状态:6Status:0,代码:1007,文本: "远程服务器" (null) "不存在,或者尚未指定为有效的发布者,或者你可能无权查看可用的发布者。"。状态:4,代码:6001,文本: "命令加载程序的后台线程正在退出"。状态:0,代码:22020,文本: "批未提交到分发服务器。"。状态:0,代码:22037,文本: "最后一步未记录任何消息!"。
注意 已在 SQL Server 2014 Service Pack 2 中添加了 Drop table 支持(DROP TABLE DDL)。 有关 drop table 支持的详细信息,请参阅 Microsoft 知识库中的以下文章:
3170123 支持删除 SQL Server 2014 中的事务复制中包含的文章的表 DDL
解决方案
在 SQL Server 的以下累积更新中修复了此问题:
Sql server 2014 的累积更新 1 Service Pack 2 sql Server 2016 累积更新 2
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
Sql server 2014 的最新累积更新sql server 2016 的最新累积更新
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。
参考
了解 Microsoft 用于描述软件更新的 术语 。