【问题标题】:Invalid Replication Server Name (IP Address) SQL Server 2012无效的复制服务器名称(IP 地址)SQL Server 2012
【发布时间】:2022-01-03 10:09:47
【问题描述】:

我有一个生产服务器 (SQL Server 2012),有人试图设置复制(分发服务器),但他们使用 IP 地址而不是名称。

我可以看到安装必须失败,因为 msdb 数据库中没有复制数据库,并且在此过程中通常创建的其他项目也丢失了。实际的服务器名称由Select @@SERVERNAME 返回,它是一个实例,因此它返回 NAME\XXX。

我尝试运行EXEC sp_dropdistributor;,但它会产生以下错误:

名称“127.0.0.1.master.sys.sp_MSrepl_getdistributorinfo”不是有效标识符。

(我已经用localhost替换了IP)。

我怀疑这是因为 IP 需要被 [] 包围。

如何终止发行版并重新开始?

鉴于它是一个生产服务器,我担心只是摆弄。

过程使用的datasource, srvname 字段中的服务器名称将IP 地址设置为名称。

目录 (master.dbo.sysservers) 中似乎只有 1 行将服务器名称 (srvname) 设置为 IP 地址。

【问题讨论】:

  • 查询[msdb].[dbo].[MSdistpublishers]表会得到什么?
  • ...您在 SSMS 中的 <instance> | Server Objects | Linked Servers(导航树)中有 127.0.0.1 吗?

标签: sql-server replication


【解决方案1】:

这可能不适用于您的情况,但它确实适用于我的情况....

首先检查distribution 数据库中没有人:

SELECT * FROM sys.dm_exec_sessions AS sdes WHERE sdes.database_id = DB_ID('distribution');

如果您在数据库中找到 (a) 个会话,则使用以下命令终止它们:

KILL <session_id>;

接下来删除distribution 数据库:

EXEC sp_dropdistributiondb @database = N'distribution'; 

然后使用以下命令停用distributor

EXEC sp_dropdistributor;

如果上述命令失败运行:

EXEC sp_dropdistributor  @ignore_distributor = 1, @no_checks = 1;

参考: sp_dropdistributiondb (Transact-SQL)(Microsoft | SQL Docs)

【讨论】:

  • 感谢您的意见。我遇到的问题是 sp_dropdistributor 在运行时由于分发者的名称而产生错误。安装没有达到创建数据库或一些存储过程的程度。
  • 即使有附加参数?
  • 是的,删除的存储过程不会因为 SERVERNAME.master.sys.sp_MSrepl_getdistributorinfo 失败而运行,因为我认为它应该是 [SERVERNAME].master.sys.sp_MSrepl_getdistributorinfo。如果服务器名称包含句号,我很惊讶他们没有在服务器名称的存储中这样做。
【解决方案2】:

经过进一步调查,发现无效的基于 IP 地址的服务器已设置为链接服务器,并且分发设置为 true。

使用 SMS,即使服务器无法访问,我也能够将分发标志设置为 false。之后,我就可以在服务器上配置分发了。

我通过进入链接服务器并使用 IP 地址名称查看每个服务器发现了这一点,我能够隔离无效服务器并更改高级面板上的分发设置。

系统会要求您确认是否要对无法访问的服务器进行更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 2013-03-27
    • 1970-01-01
    相关资源
    最近更新 更多