Eu queria fazer uma cópia de um banco de dados e dar a ele um nome diferente e fazer com que nosso aplicativo se conectasse a essa nova cópia do banco de dados. O único problema é que outros bancos de dados que nosso aplicativo faz referência armazenaram procs com referências codificadas para o nome do banco de dados original. Portanto, mesmo que eu possa fazer o aplicativo se conectar à cópia, quaisquer outros bancos de dados aos quais ele se conectar ainda se conectarão ao original.
Eu tenho que acreditar que este é provavelmente um problema comum que foi resolvido, mas estou me perguntando se a solução é algo que ainda posso fazer em cima da implementação que temos ou se é algo que precisava ser projetado de forma diferente para começar. e em caso afirmativo, qual é o design "adequado" para lidar com esse problema?
Referenciando o último último parágrafo da sua pergunta
Sim, tenho visto muitos posts e blogs sobre este assunto e a abordagem recomendada que tenho visto é usar SYNONYMS .
Um sinônimo é como um alias. Ele fornece uma maneira de fazer referência a um objeto como uma tabela, visualização ou procedimento armazenado, mas a parte desafiadora é que a
SYNONYM
só pode ser definida como um nome de duas partes (schema.object). Essa limitação exigiria que você fizesse alterações de código em seus objetos existentes que fazem referência a nomes de 3 partes (Database.Schema.Object).Aqui está um exemplo de um sinônimo da documentação. O exemplo a seguir cria primeiro um sinônimo para o objeto base, Product no banco de dados AdventureWorks2012 e, em seguida, consulta o sinônimo.
Em sua situação particular, vamos supor que você tenha referências a
db1.dbo.Customers
. Você pode criar um sinônimo chamadoDb1Dbo.Customers
que aponta paradb1.dbo.Customers
. Quaisquer objetos que atualmente fazem referênciadb1.dbo.Customers
precisariam ser alterados paraDb1Dbo.Customers
.Agora, você deseja fazer uma cópia do banco de dados
db1
e chamá-lo dedb1copy
. Depois de criar odb1copy
banco de dados, basta descartar o existentesynonym
no bancodb1copy
de dadosDB1Dbo.Customers
e recriá-lo para apontar paradb1copy.dbo.Customers
.Existem algumas 'pegadinhas' ao usar
SYNONYMS
embora. Dê uma olhada no post de Aaron Bertrand - #BackToBasics: The Beauty of the Synonym . Como ele mesmo diz: ' Mas nem tudo são rosas '. Entre as 'pegadinhas' que Aaron discute estão: