重命名 SQL 服务器主机后更新 sys.servers

Update sys.servers after renaming SQL Server Host

我即将把我的 SQL Server 2012 实例升级到 SQL Server 2014。

我克隆了主机 Windows 虚拟机并将其从 foo-2012 重命名为 foo-2014。 重新启动时,SQL 服务器实例注意到它更新了它自己的名称,所以我现在可以用 foo-2014 登录它。一切顺利。

不幸的是 sys.servers 中的(单个)条目仍然是 foo-2012 这意味着 运行ning

SELECT * 
FROM [foo-2012].[barDB].[dbo].tFooBarTable

失败:

Could not find server 'RW-DB-2014' in sys.servers. Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to sys.servers.

很好。

我 运行 EXEC sp_addlinkedserver 'foo-2014', 'SQL Server' 并获得一个条目。

但现在新条目有 isLinked=1(而现有条目有 isLinked=0)。

Documentation 表示此设置很重要(尤其是对我的应用程序,它对 Distr.Trans 有非常强烈的意见。:( )

我不能直接edit/add to/modify sys.servers。任何这样做的尝试都会得到:

Ad hoc updates to system catalogs are not allowed.

我删除了成功的新条目 (EXEC sp_dropserver 'foo-2014'),并尝试使用报告

EXEC sp_addserver 'foo-2014', 'local'

The server 'foo-2014' already exists

立即重新运行然后报告

The server 'RW-DB-2014' does not exist. Use sp_helpserver to show available servers.

我该如何解决这个问题?

您需要先删除旧服务器 foo-2012,这样 sys.servers 中就没有行了,然后使用 'local':

添加
EXEC sp_dropserver 'foo-2012';
GO
EXEC sp_addserver 'foo-2014', 'local'; 
GO

然后您将需要重新启动 MSSQLSERVER 服务以使该更改生效,根据 sp_addserver 的文档:

The local definition takes effect only after the Database Engine is restarted.