【问题标题】:SQL Server @@SERVERNAME returning old machine name?SQL Server @@SERVERNAME 返回旧机器名?
【发布时间】:2012-12-21 07:58:32
【问题描述】:

我刚刚在我的 SQL Server 2008 R2 中偶然发现了一个问题 - 当我调用 @@SERVERNAME 时,它返回的是我旧计算机的计算机名称,而不是当前计算机名称。为什么是这样?我该如何解决? SQL Server 不知何故记住了旧的机器名称。

【问题讨论】:

  • 在安装过程中可能存储在内核数据库中。
  • 感谢之前的回答,帮助我解决了我的问题。只是给其他人的说明,如果您想要从@@SERVERNAME 返回的整个服务器名称,您可以使用SELECT SERVERPROPERTY('ServerName');
  • 添加一个有趣的东西 - 我刚刚更改了运行 SQL Server 2014 的机器名称 - 它自动完成了这项任务。

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


【解决方案1】:

这是众所周知的,并且有记录,请参阅Rename a Computer that Hosts a Stand-Alone Instance of SQL Server

当您更改运行 SQL Server 的计算机的名称时, 在 SQL Server 启动期间会识别新名称。你没有 再次运行安装程序以重置计算机名称。相反,使用 按照步骤更新存储在 sys.servers 并由系统函数@@SERVERNAME 报告:

sp_dropserver <old_name>;
GO
sp_addserver <new_name>, local;
GO

您也可以使用SERVERPROPERTY('MachineName'),它保证始终返回更新后的名称:

MachineName 服务器实例所在的 Windows 计算机名称 跑步。对于集群实例,运行 SQL Server 的实例 在 Microsoft 群集服务上的虚拟服务器上,它返回名称 虚拟服务器。

SERVERPROPERTY('ComputerNamePhysicalNetBIOS') 将返回集群中的当前活动节点,或与非集群实例上的“MachineName”相同的值。

编辑(由第 3 方)添加 WEFX 的评论,以防有人错过:

此外,您需要重新启动 SQL 服务(或重新启动 SQL Server),以便 SELECT @@SERVERNAME 返回准确的(新)服务器名称

【讨论】:

  • 比我的更完整的答案。 +1
  • 另外,您需要重新启动 SQL 服务(或重新启动 SQL Server)才能让“SELECT @@SERVERNAME”返回准确的(新)服务器名称。
  • 声明@s varchar(50);选择@s = cast(SERVERPROPERTY('ComputerNamePhysicalNetBIOS') as varchar); exec sp_dropserver @@servername; exec sp_addserver @s,local;
【解决方案2】:

我已经尝试了所有可能的解决方案,但批准的答案对我不起作用。我浏览了一下并想出了完美的解决方案。我希望有人觉得这很有帮助。

1) Window + R键打开注册表。输入 regedit

2) 转到 *HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server* 你会看到很多编号的目录(100,120,130 ....)

您只需在注册表编辑器的地址栏中输入“Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\”

3) 浏览所有编号的目录,看看是否可以在里面找到“Machines”目录

4) 找到“Machines”后,将 OriginalMachineName 键更改为您想要的服务器名称。这实际上是第一次安装 windows 时的原始机器名称。

PS:我的路径是 OriginalMachineName > Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\Machines

【讨论】:

  • 有趣的是,对于 AWS SQL Server AMI,此注册表位置的值与您启动新机器时的默认机器名称不同,如果您手动命名机器,则可能会有所不同。在我们的机器上一致工作的唯一解决方案是使用 SERVERPROPERTY('MachineName') 而不是 @@SERVERNAME。
【解决方案3】:

我怀疑这是因为该实例是默认安装并继承了当时的机器名称并保留了它。 试试这个?

SELECT SERVERPROPERTY('MachineName')

【讨论】:

    【解决方案4】:

    运行sp_dropserver 'oldServerName';时有时会收到错误There are still remote logins or linked logins for the server 'yourServerName'

    如果您遇到此类错误,请尝试运行 sp_dropserver 'oldServerName', 'droplogins';

    【讨论】:

      【解决方案5】:

      sp_addserver 会修复它.....

      【讨论】:

        【解决方案6】:

        对于托管 SQL Server 默认实例的重命名计算机,请运行以下过程:

        EXEC sp_dropserver '<old_name>';  
        GO  
        EXEC sp_addserver '<new_name>', local;  
        GO  
        

        重新启动 SQL Server 实例。

        对于托管 SQL Server 命名实例的重命名计算机,请运行以下过程:

        EXEC sp_dropserver '<old_name\instancename>';  
        GO  
        EXEC sp_addserver '<new_name\instancename>', local;  
        GO 
        

        【讨论】:

          【解决方案7】:

          就我而言,我不能放弃名称;我可以根据需要重新启动 MSSQL 或 VM,@@SERVERNAME 一直返回旧名称,而其他所有方法(包括 SERVERPROPERTY('SERVERNAME'))都在返回新名称,这会导致各种问题。原来删除 new 名称并重新添加它(当然还要重新启动 MSSQL)解决了这个奇怪的问题:

          sp_dropserver <new_name>; GO
          sp_addserver <new_name>, local; GO
          

          【讨论】:

            猜你喜欢
            • 2021-08-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-12
            • 2020-08-02
            • 1970-01-01
            相关资源
            最近更新 更多