我有一个用于报告服务的数据库。该数据库是由不再存在的承包商创建的。隐藏在整个数据库中的是对链接服务器上单个表的引用。正在移动该链接服务器上的内容,并且该服务器正在停用。
与其寻找所有链接服务器引用并更新它们以指向新的链接服务器,或者将它们更改为使用同义词名称,不如创建新的链接服务器,然后添加同义词是可能的(或可接受的)使用与当前完全限定的链接服务器引用相同的名称,但指向新的链接服务器?这将使我能够完整地保留所有数据库代码并最大限度地减少对业务用户的干扰。
这就是我的想法。当前的链接服务器是 SRAPP。所有使用链接服务器的查询都指向 OPub.dbo.ADE。
exec sp_addlinkedserver @server=SQLProd1
然后
CREATE SYNONYM [SRAPP.OPub.dbo.ADE]
FOR SQLProd1.OPub.dbo.ADE
GO
最后,
exec sp_dropserver 'SRAPP'
SQL Server 是否会被与链接服务器引用相同的同义词名称混淆?
你尝试过你的想法吗?你的结果是什么?是的,您可以创建一个
synonym
:但是您不能使用链接服务器的同义词。此外,自 SQL Server 2016 起,存在以下限制:
建议: 删除并重新创建链接服务器“SRAPP”。您可以通过编写现有定义的脚本来帮助自己。删除现有的链接服务器并使用新的服务器名称重新创建它。
自 SQL Server 2016 起,只能
synonyms
定义为:是的,我们可以想到很多关于同义词的事情,但它们还不存在。
同义词是模式拥有的数据库对象。选择使用您的架构如下所示:
那里没有混乱的机会。
如果旧服务器正在退役(脱机),让您的 IT 人员将退役服务器名称的 DNS 条目设置为指向将接管的新服务器。这不是最干净的解决方案,但您不必更新数据库中的任何内容,并且链接服务器连接保持不变。
这里的第一个问题是您的同义词 DOESN"T 看起来与链接服务器引用相同。通过使用方括号
[]
,您告诉它像对待任何其他字符一样对待句点,而不是将 SRAPP 分开来像服务器、数据库一样对待它,架构等...也就是说,如果您删除方括号,您至少会遇到这个问题
我不知道如何为链接服务器使用同义词,这将是这里的理想答案。据我所知,我认为您将不得不更新这些参考资料。为了最少的工作量,您可以像这里一样设置同义词,这应该可以工作,然后找到引用并添加方括号以使其与同义词匹配。