【问题标题】:Restore production database to multiple test databases SQL server将生产数据库恢复到多个测试数据库 SQL server
【发布时间】:2012-08-02 03:29:26
【问题描述】:

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

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

例如,从生产环境中复制数据库后,我们将有一个这样的存储过程:

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

对于测试数据库,它需要是:

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

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

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

我们使用的是 SQL Server 2008R2。

【问题讨论】:

    标签: sql-server


    【解决方案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 部分表名称替换为同义词,这可能会混淆问题,因为它无法明确表是本地的还是外部的。

    【讨论】:

    • 这个接受是姗姗来迟的。但是 sqlcmd 是解决这个问题的最佳方法。值得庆幸的是,由于我们能够摆脱该设置,因此不再需要它。我们现在使用实例。
    【解决方案2】:

    据我所知,没有比这里替换脚本中的数据库名称更简单的方法了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 2019-09-03
      • 2013-11-19
      相关资源
      最近更新 更多