将生产数据库还原到多个测试数据库SQL Server

时间:2012-08-02 03:29:27

标签: sql-server

将生产数据库复制到多个测试数据库的最佳方法是什么,同时保持完全限定名称的完整性?

目前,为了刷新测试环境,我们从生产数据库中恢复测试数据库。然后,我们编写所有存储过程/视图/等脚本。并在所有数据库引用上执行查找/替换以指向测试对象。在我们所有参考文献都正确之后,我们会改变它们。

例如,在从生产中复制数据库之后,我们将有一个类似的存储过程:

alter procedure dbo.SomeProcedure
as
select SomeColumn
from InternetSecurity.dbo.SomeTable
join Validation.dbo.AnotherTable on SomId = AnoId

对于测试数据库,它必须是:

alter procedure dbo.SomeProcedure
as
select SomeColumn
from InternetSecurityQA1.dbo.SomeTable
join ValidationQA1.dbo.AnotherTable on SomId = AnoId

每个测试数据库都有视图/存储过程/函数可以引用多达30个不同的其他测试数据库,因此“查找/替换”过程非常耗时并且容易出现很多错误。

恢复这些测试环境的最佳方法是什么?

我们正在使用SQL Server 2008R2。

2 个答案:

答案 0 :(得分:1)

假设不同的环境位于不同的SQL Server上(或至少在不同的实例上),那么建议您将所有环境中的数据库名称保持完全相同。使用权限(例如集成安全性)确保只有正确的环境系统和用户才能访问相应的环境数据库。

但是,如果确实需要为不同的环境保留不同的数据库名称(例如,同一SQL实例上的所有环境),则可以使用sqlcmd with the -v开关来参数化数据库名称。

然后需要重写您的更改脚本:

alter procedure dbo.SomeProcedure
as
   select SomeColumn
   from [$(InternetSecurity)].dbo.SomeTable
   join [$(Validation)].dbo.AnotherTable on SomId = AnoId

然后您可以编写批处理文件以将正确的参数值传递给sqlcmd。

或者,您可以在Visual Studio中使用.dbproj项目来设置多个配置,以便为每个环境提供不同的值,并从Visual Studio生成脚本/发布。

此外,AFAIK SQL Synonyms在这里真的不会有帮助。您需要将所有过程和函数中的3部分表名替换为同义词,这可能会使问题混淆,因为它无法清楚表是本地还是外部。

答案 1 :(得分:0)

据我所知,除了替换脚本中的数据库名称之外没有其他更简单的方法了。