重命名 SQL Server 主机后更新 sys.servers

Rei*_*l-- 4 sql-server rename linked-server

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

我已经克隆了主机的Windows虚拟机,并从它改名foo-2012foo-2014。重新启动时,SQL Server 实例注意到它更新了自己的名称,因此我现在可以以foo-2014. 都好。

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

SELECT * 
FROM [foo-2012].[barDB].[dbo].tFooBarTable
Run Code Online (Sandbox Code Playgroud)

失败:

在 sys.servers 中找不到服务器“RW-DB-2014”。验证是否指定了正确的服务器名称。如有必要,请执行存储过程 sp_addlinkedserver 将服务器添加到 sys.servers。

美好的。

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

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

文档表明此设置很重要(特别是对于我的应用程序,它对 Distr.Trans 有很强的意见。:()

我无法直接编辑/添加/修改 sys.servers。任何这样做的尝试都会给出:

不允许对系统目录进行临时更新。

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

服务器 'foo-2014' 已经存在

立即重新运行 drop 然后报告

服务器“RW-DB-2014”不存在。使用 sp_helpserver 显示可用的服务器。

我该如何解决?

Sol*_*zky 7

您需要首先删除旧服务器,foo-2012以便在 中没有行sys.servers,然后使用以下内容进行添加'local'

EXEC sp_dropserver 'foo-2012';
GO
EXEC sp_addserver 'foo-2014', 'local'; 
GO
Run Code Online (Sandbox Code Playgroud)

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

本地定义只有在数据库引擎重启后才会生效。