Sql-Server
虛擬機複製後無法更改伺服器名稱
由於我無法控制的原因,我必須找到解決此問題的方法。簡單地重新安裝實例不是一種選擇。在 sys.servers 中顯示為 server_id 0 的伺服器名稱仍顯示舊的伺服器名稱。
執行以下命令時出現錯誤:
sp_dropserver 'OLD_INSTANCE' GO sp_addserver 'NEW_INSTANCE', Local GO
錯誤資訊:
消息 15190,級別 16,狀態 1,過程 sp_dropserver,第 67 行
伺服器“OLD_INSTANCE”仍有遠端登錄或連結登錄。
消息 15028,級別 16,狀態 1,過程 sp_addserver,第 87 行
伺服器“NEW_INSTANCE”已經存在。
最奇怪的是,遠端登錄是“空”登錄。
exec sp_dropremotelogin @remoteserver = 'OLD_INSTANCE' go
錯誤資訊:
消息 15185,級別 16,狀態 1,過程 sp_dropremotelogin,第 70 行
沒有從遠端伺服器 ‘OLD_INSTANCE’ 映射到本地使用者 ‘(null)’ 的遠端使用者 ‘(null)’。
舊實例不存在登錄名。
sp_helpremotelogin 'OLD_INSTANCE'
消息 15201,級別 16,狀態 1,過程 sp_helpremotelogin,第 37 行
遠端伺服器“OLD_INSTANCE”沒有遠端登錄。
如果我無法刪除不存在的登錄名,如何重命名此實例?有沒有辦法刷新登錄名?
您需要同時檢查
sys.remote_logins
和sys.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';