【问题标题】:Sql Server replication requires the actual server name to make a connection to the serverSql Server 复制需要实际的服务器名称来建立与服务器的连接
【发布时间】:2011-11-21 12:46:41
【问题描述】:

当我想创建新的出版物或订阅时,我收到以下消息。

“Sql Server 复制需要实际的服务器名称才能与服务器建立连接。不支持通过服务器别名、IP 地址或任何其他备用名称的连接。请指定实际的服务器名称”

有人知道我该怎么办吗?

【问题讨论】:

    标签: sql-server sql-server-2008-r2


    【解决方案1】:

    我在以下链接http://www.cryer.co.uk/brian/sqlserver/replication_requires_actual_server_name.htm找到了解决方案

    感谢 Brian Cryer 的有用网站

    引用链接以避免链接失效:

    原因:

    在原始安装 SQL Server 后已重命名的服务器上观察到此错误,并且 SQL Server 配置函数@@SERVERNAME 仍返回服务器的原始名称。这可以通过以下方式确认:

    select @@SERVERNAME
    go
    

    这应该返回服务器的名称。如果不正确,请按照以下步骤进行更正。

    补救措施:

    要解决此问题,需要更新服务器名称。使用以下内容:

    sp_addserver 'real-server-name', LOCAL
    

    如果这给出了一个错误,抱怨名称已经存在,那么使用以下顺序:

    sp_dropserver 'real-server-name'
    go
    
    sp_addserver 'real-server-name', LOCAL
    go
    

    如果报告的错误是“已有本地服务器”。然后使用以下顺序:

    sp_dropserver old-server-name
    go
    
    sp_addserver real-server-name, LOCAL
    go
    

    “old-server-name”是原始错误正文中包含的名称。

    停止并重新启动 SQL Server。

    【讨论】:

    • @TomStickel 我在 Azure 上也有同样的问题,没有重命名服务器的问题
    • @Ricconnect - 显然您想在本地和本地机器上使用 SSCM(配置管理),为 32 位和其他(64 位)添加别名/服务器名称。 ...这让我更进一步,但后来我遇到了关于兼容性的错误问题...我正在尝试将 2014 sql 转换为 2016 azure cloud vm sql ...但在 2014 年,我确实设置了从sql server 2008 r2 ....我需要回到那个项目任务...只是有点痛苦
    • 是否需要在远程订阅者或发布者机器上运行此代码?
    • 如果您在使用 Azure 时遇到此问题,请确保您使用的是最新版本的 SSMS。这为我解决了问题。
    • 还要确保以[user_id]@[server_name] 的形式提供订阅者 (Azure DB) 的用户名。我在这个问题上浪费了几个小时。
    【解决方案2】:

    这个问题还有另一种解决方案,不需要**sp_dropserver****sp_addserver**或者重启服务器。

    步骤:

    1. 阅读错误消息并记住引号中的 SERVERNAME。
    2. 在安装了 Management Studio 的机器上运行 Sql Server 配置管理器(通常是发布者/分发者端);
    3. 展开Sql Native 10.0 Configuration\Aliases节点;
    4. 1 创建一个名为 SERVERNAME 的新别名。对于命名实例,它应该是 NetBIOS 机器名称或 NetBIOS\instance_name
    5. 指定别名的其他选项(端口、服务器和协议)。
    6. 对于 32 位原生客户端,重复 45
    7. 测试。在同一台机器上运行 Management Studio 并尝试连接到服务器(指定别名作为服务器名称)。

    8. (可选)对使用 Management Studio 进行复制设置的所有客户端计算机重复 2 - 7

    就是这样!

    【讨论】:

    • 是的!它完成了!但是为什么要在服务端和客户端都设置呢?
    • 这些设置不是针对服务器的,而是针对 SSMS 客户端的。如果 SSMS 和 sql-server 安装在同一台机器上,那么您只需设置一次,此错误将仅针对此 SSMS-client 实例消失。
    • 快速注意,如果您通过 FTP 创建发布并创建别名,SQL Server 将尝试通过别名连接到 FTP 站点,这可能不正确。如果您编辑 c:\windows\System32\drivers\etc\hosts 文件并添加别名及其 IP 地址,则可以解决此问题。
    【解决方案3】:

    简答:检查您是否通过 SSMS 连接了错误的网络别名

    例如,您的服务器可以同时访问:

    • 我的数据服务器
    • MyDataServer.Company.Com

    创建复制发布/订阅时,它会与当时用于连接服务器的名称相关联,如果您使用不同的别名或完全限定名称进行连接,则会出现问题中所述的错误。

    详情: 我刚刚遇到了这个问题,关于更改 @@servername 的答案帮助我理解了这个问题,但我不必这样做。

    考虑一下:

    sql server 框设置为 {my_system_name}.local.domain

    在我们的网络中,我们有一个网络别名,这样 {my_system_alias} 允许我们访问服务器并避免输入完全限定域名 (FQDN)。

    安装了 Sql Server,并且在使用 {my_system_alias} 名称连接时设置了本地复制发布。

    然后我使用指定 FQDN 的 SSMS 连接到服务器,如果我右键单击此现有复制的属性 -> 本地发布,我收到错误:“Sql Server 复制需要实际的服务器名称”。

    我所要做的就是:使用别名(或其他方式)重新连接到 SSMS 中的服务器,这样我就可以看到复制发布的详细信息。

    PS:Phill 在另一个答案中的评论也是另一种选择,使主机文件条目与您需要用于连接的名称相匹配。

    【讨论】:

      【解决方案4】:

      另一种解决方案是使用附加参数 el SQL Server management Studio 连接到该数据库。

      为此,在连接时,服务器名称将是您通过@@servername 查询得到的服务器名称(或错误消息提示您的服务器名称),然后选择“选项>>”按钮

      然后,在 Additional Connection Parameters 选项卡中,您可以添加数据库的当前名称

      问候,

      【讨论】:

      • 这会导致连接错误“与 SQL Server 建立连接时发生与网络相关或特定于实例的错误。...(提供者:命名管道提供者,错误:40 ...)” .我可以在没有SERVER='xxx' 参数的情况下连接到该服务器。我正在远程连接,我还要注意这些查询 SELECT SERVERPROPERTY('MachineName')SELECT @@SERVERNAME 都返回相同的字符串
      • 嗨@ZachSmith,它对我有用,你确定在登录选项卡中你只使用服务器名称吗?
      • 我在ip地址中添加了主机名的别名。最初我使用 ip 地址作为主机名
      • Zach Smith,将别名添加到 Windows 主机文件对我有用。天才级别!
      • 这个方法对我有用,但我必须提到,在 Server Name 中粘贴来自 SELECT SERVERPROPERTY(N'servername')SELECT @@SERVERNAME 的结果以及 Additional Connection Parameters 添加类似SERVER=tcp:192.168.1.1,1433; 的内容。感谢@an3sarmiento
      【解决方案5】:

      您需要在其中更改服务器名称,就像机器名称一样。

      1. 检查服务器名称:

      @@服务器名

      1. 删除上面测试名称中出现的服务器旧名称:

      sp_dropserver 'old_name'

      1. 添加新的名称服务器:

      sp_addserver 'new_name', 'local'

      【讨论】:

        【解决方案6】:

        分享我的修复,在尝试一切之后,我可以找到解决此问题的方法。我试图使用 SSMS 18.2(本文发布时的最新版本)在 SQL Server 2017 上设置复制。当我设置分发服务器时,一切正常,但是当我进入分发服务器属性并选中“创建队列读取器代理”框时,我会得到著名的“SQL Server 复制需要实际的服务器名称才能连接到服务器。指定实际的服务器名称,''。(Replication.Utilities)”问题。

        很多天后,我尝试了不同版本的 SSMS。安装 SSMS 17.9.1 并重新尝试一切正常。希望这对其他人有帮助。

        【讨论】:

          【解决方案7】:

          如果您在托管环境中工作,其中服务器名称是奇怪的字符串,实际上可能正在与其他服务器共享......例如WIN-II7VS-100。感谢@ZachSmith,我找到的解决方案是编辑您要连接的服务器上的主机文件,并将其设置为您要连接的 SQL 服务器的静态 IP。

          【讨论】:

            【解决方案8】:

            如果复制机器上出现此问题 必须在复制机器上运行以下代码 1-首先找到实名服务器

            select @@SERVERNAME
            go
            

            2- 使用下面的代码删除真实服务器名称

            sp_dropserver 'real-server-name'
            go
            

            3-用下面的代码添加真实的服务器名称

            sp_addserver 'real-server-name', LOCAL
            go
            

            【讨论】:

            • 先生。 Tamer 没有在接受的答案中写下应该在哪台机器和何时执行这些代码!如果这个错误有不同的场景。如果您阅读我的文字,我编写了执行此代码的场景我的努力是帮助人们不要误入歧途
            【解决方案9】:

            如果订阅机器上的这个问题要解决这个问题,你必须安装 与目标机器相同或更高版本的 SSMS

            【讨论】:

            • 您确定您回答的问题正确吗?
            • 是的,这个解决方案是正确的。对于目标中的复制,当我们要创建订阅时,当前系统中的 SSMS 版本必须等于或高于目标 SSMS 版本。这种方式是这件事的基础工作之一
            猜你喜欢
            • 2012-04-20
            • 2017-08-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-11-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多