![](/img/trans.png)
[英]Query to get servername, instancename, machine_name, database_name, recovery model, isclustered in SQL Server
[英]SQL Server @@SERVERNAME returning old machine name?
我刚在SQL Server 2008 R2中偶然发现一个问题-调用@@SERVERNAME
,它返回的是旧计算机的计算机名,而不是当前的计算机名。 为什么是这样? 我该如何解决? SQL Server以某种方式记住了旧计算机的名称。
这是众所周知的并已记录在案,请参阅重命名承载SQL Server独立实例的计算机 :
当您更改运行SQL Server的计算机的名称时,新名称将在SQL Server启动期间被识别。 您不必再次运行安装程序来重置计算机名称。 而是,使用以下步骤来更新存储在sys.servers中并由系统功能@@ SERVERNAME报告的系统元数据:
sp_dropserver <old_name>;
GO
sp_addserver <new_name>, local;
GO
您还可以使用SERVERPROPERTY('MachineName')
保证始终返回更新的名称:
MachineName运行服务器实例的Windows计算机名称。 对于群集实例,即在Microsoft群集服务上的虚拟服务器上运行的SQL Server实例,它将返回虚拟服务器的名称。
SERVERPROPERTY('ComputerNamePhysicalNetBIOS')
将返回集群中的当前活动节点,或与非集群实例上的'MachineName'相同的值。
编辑(由第三方)以添加WEFX的评论,以防有人错过:
另外,您需要重新启动SQL服务(或重新启动SQL Server),以便
SELECT @@SERVERNAME
返回准确的(新)服务器名。
我怀疑这是因为实例是默认安装,并且当时继承了计算机名称并保留了该名称。 尝试这个?
SELECT SERVERPROPERTY('MachineName')
有时您会得到一个错误There are still remote logins or linked logins for the server 'yourServerName'
运行sp_dropserver 'oldServerName';
时There are still remote logins or linked logins for the server 'yourServerName'
sp_dropserver 'oldServerName';
如果您遇到这种错误,请尝试运行sp_dropserver 'oldServerName', 'droplogins';
代替。
我尝试了所有可能的解决方案,但批准的答案对我不起作用。 我已经浏览了一下,并提出了完美的解决方案。 我希望有人能对此有所帮助。
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> 计算机\\ HKEY_LOCAL_MACHINE \\ SOFTWARE \\ Microsoft \\ Microsoft SQL Server \\ 130 \\ Machines
sp_addserver将修复它.....
就我而言,我不能放弃旧名字。 我可以重新启动MSSQL或VM, @@SERVERNAME
始终返回旧名称,而其他所有方法(包括SERVERPROPERTY('SERVERNAME')
)都返回新名称,这会引起各种问题。 事实证明,删除新名称并重新添加(当然,然后重新启动MSSQL)可以解决此奇怪的问题:
sp_dropserver <new_name>; GO
sp_addserver <new_name>, local; GO
如果您先运行sp_dropserver
,然后再运行sp_addserver
如其他人所述)并且未使用SELECT @@ SERVERNAME进行更改,则数据库名称也区分大小写。 只要检查您拼写正确的数据库名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.