VM 克隆后无法更改服务器名称

Geo*_*wdy 6 sql-server instance sql-server-2008-r2

由于我无法控制的原因,我必须找到解决此问题的方法。简单地重新安装实例并不是一个选择。在 sys.servers 中显示为 server_id 0 的服务器名称仍显示旧的服务器名称。

运行以下命令时出现错误:

sp_dropserver 'OLD_INSTANCE'
GO
sp_addserver 'NEW_INSTANCE', Local
GO 
Run Code Online (Sandbox Code Playgroud)

错误信息:

消息 15190,级别 16,状态 1,过程 sp_dropserver,第 67 行
服务器“OLD_INSTANCE”仍有远程登录或链接登录。
消息 15028,级别 16,状态 1,过程 sp_addserver,第 87 行
服务器“NEW_INSTANCE”已存在。

最奇怪的是,远程登录是“空”登录。

exec sp_dropremotelogin @remoteserver = 'OLD_INSTANCE'
go
Run Code Online (Sandbox Code Playgroud)

错误信息:

消息 15185,级别 16,状态 1,过程 sp_dropremotelogin,第 70 行
没有从远程服务器“OLD_INSTANCE”映射到本地用户“(null)”的远程用户“(null)”。

旧实例不存在登录信息。

sp_helpremotelogin 'OLD_INSTANCE'
Run Code Online (Sandbox Code Playgroud)

消息 15201,级别 16,状态 1,过程 sp_helpremotelogin,第 37
行 远程服务器“OLD_INSTANCE”没有远程登录。

如果无法删除不存在的登录名,如何重命名该实例?有没有办法刷新登录信息?

小智 5

我必须发帖,因为这在今天重命名 SQL2014 默认实例时给了我最大的帮助......

您还可以使用以下内容:

exec sp_dropserver 'current_name', @droplogins = 'droplogins'
exec sp_addserver 'new_name', local
Run Code Online (Sandbox Code Playgroud)

这绝对救了我今天的培根。感谢您的这篇文章,我希望我的文章也能帮助其他人。

上下文:从 SQL2008 故障转移到新安装的 SQL2014。有一些生产 SQL 机器按照我们的软件提供商的规格进行链接。

我试图重命名 2014 年服务器以匹配 2008 年服务器的 IP 和名称(已更改为不同的名称),但不断收到现有远程/链接登录的错误。

经过大量搜索后,@droplogins 命令起作用了。

我希望这对将来的人有帮助。


Aar*_*and 4

您需要检查sys.remote_loginssys.linked_logins。您应该能够动态构建脚本来删除找到的集合:

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += N'EXEC sys.sp_droplinkedsrvlogin @s, N''' + remote_name + N''''
  FROM sys.linked_logins
  WHERE server_id = 0 AND remote_name IS NOT NULL;

SELECT @sql += N'EXEC sys.sp_dropremotelogin @s, N''' + remote_name + N''''
  FROM sys.remote_logins
  WHERE server_id = 0 AND remote_name IS NOT NULL;

PRINT @sql; -- spot check will only show first 8K of command

DECLARE @s NVARCHAR(512) = N'old server name';
--EXEC sys.sp_executesql @sql, N'@s NVARCHAR(512)', N'.\SQL2014';
Run Code Online (Sandbox Code Playgroud)