我想制作一个数据库的副本并给它一个不同的名称,然后让我们的应用程序连接到这个新的数据库副本。唯一的问题是我们的应用程序引用的其他数据库存储了对原始数据库名称进行硬编码引用的过程。因此,即使我可以让应用程序连接到副本,它连接到的任何其他数据库仍将连接到原始数据库。
我不得不相信这可能是一个已经解决的常见问题,但我想知道解决方案是否仍然可以在我们现有的实现之上做,或者是否需要以不同的方式开始设计...... .如果是这样,处理这个问题的“正确”设计是什么?
我想制作一个数据库的副本并给它一个不同的名称,然后让我们的应用程序连接到这个新的数据库副本。唯一的问题是我们的应用程序引用的其他数据库存储了对原始数据库名称进行硬编码引用的过程。因此,即使我可以让应用程序连接到副本,它连接到的任何其他数据库仍将连接到原始数据库。
我不得不相信这可能是一个已经解决的常见问题,但我想知道解决方案是否仍然可以在我们现有的实现之上做,或者是否需要以不同的方式开始设计...... .如果是这样,处理这个问题的“正确”设计是什么?
引用你问题的最后一段
是的,我看过很多关于这个问题的帖子和博客,我看到的推荐方法是使用SYNONYMS。
同义词就像别名。它提供了一种引用表、视图或存储过程等对象的方法,但具有挑战性的部分是 a
SYNONYM
只能定义为两部分名称 (schema.object)。此限制要求您对引用 3 部分名称 (Database.Schema.Object) 的现有对象进行代码更改。这是文档中同义词的示例。下面的示例首先在 AdventureWorks2012 数据库中为基础对象 Product 创建同义词,然后查询同义词。
在您的特定情况下,假设您参考了
db1.dbo.Customers
. 您可以创建一个名为指向Db1Dbo.Customers
的同义词。当前引用的任何对象都需要更改为.db1.dbo.Customers
db1.dbo.Customers
Db1Dbo.Customers
现在,您想复制数据库
db1
并将其命名为db1copy
. 创建数据库后,您只需删除数据库db1copy
中现有的for并重新创建它以指向.synonym
db1copy
DB1Dbo.Customers
db1copy.dbo.Customers
虽然使用时有一些“陷阱”
SYNONYMS
。查看Aaron Bertrand的帖子 - #BackToBasics:同义词之美。正如他所说,“但这并不全是玫瑰”。Aaron 讨论的“陷阱”包括: