Sql server 数据库之间的MSSQL差异

Sql server 数据库之间的MSSQL差异,sql-server,tsql,Sql Server,Tsql,我们有一个web应用程序,它连接到MS SQL server。 在数据库(我们称之为Prod数据库)中,我们保留应用程序的配置(一些具有访问权限的表等)和有关客户机的信息。白天我们会收到新客户和订单 主要想法是将我们的应用程序更新到下一个补丁。 更新过程(包括测试)大约需要12小时。 问题是我们不想在“更新日”期间丢失有关客户端的数据 所以我们决定,白天不使用Prod数据库。它会像往常一样工作 这就是更新过程(高效应用程序正在运行): 在“更新日”之际,我们将使用Prod数据库备份创建另一个数

我们有一个web应用程序,它连接到MS SQL server。 在数据库(我们称之为Prod数据库)中,我们保留应用程序的配置(一些具有访问权限的表等)和有关客户机的信息。白天我们会收到新客户和订单

  • 主要想法是将我们的应用程序更新到下一个补丁。 更新过程(包括测试)大约需要12小时。 问题是我们不想在“更新日”期间丢失有关客户端的数据

  • 所以我们决定,白天不使用Prod数据库。它会像往常一样工作 这就是更新过程(高效应用程序正在运行):

  • 在“更新日”之际,我们将使用Prod数据库备份创建另一个数据库,我们称之为测试数据库
  • 我们使用测试数据库部署第二个应用程序
  • 我们更新了测试数据库
  • 白天,我们测试新补丁
  • 成功测试后,我们需要更新测试数据库和Prod数据库之间的差异(关于客户端的信息)
  • 我们需要备份测试数据库
  • 从测试数据库备份还原Prod数据库
  • 我们正在更新
  • 主要的问题是:如何恰当地传递这种差异? 考虑到Prod数据库中的数据可以更新和插入,而不是删除

    • 用于新数据:从[Prod database].[Order]选择*进入测试数据库。[Order]其中CreatedOn=[CurrentDate]
    • 用于修改数据:更新[Test Database.].[Order]设置[Test Database].[Order].[AnyColumn]=[Prod Database].[Order].[Order].[AnyColumn]自[Prod Database].[Order]其中[Prod Database].[Order].Id=[Test Database].[Order].Id]和[Prod Database].[Order].ModifiedOn=[CurrentDate]
    或者还有其他更有效的方法,可能是复制或使用快照。。 你能告诉我怎么做吗
    我不熟悉这种DBA任务,如果有任何帮助,我将不胜感激

    通常通过运行DDL和数据迁移脚本来升级生产数据库,而不是使用还原。如果您的数据库具有
    ModifiedOn
    CreatedOn
    ,那么您已经回答了自己的问题-应用数据漂移,在快照之后,您可以使用
    ModifiedDate
    CreatedOn
    捕获所有记录并应用它们,就像您发布的一样。在prod数据库上恢复测试数据库的概念会让您在夜间汗流浃背。我不管你有多勤奋,这是错误的做法。您需要创建一个部署脚本,该脚本将更新对生产数据库的任何对象更改。要测试脚本,您需要将生产恢复到QA服务器,应用脚本并测试所有内容。然后,当您满意时,可以将相同的脚本应用于prod。我使用Visual Studio中的从不同实例执行此操作,并使用TFS源代码控制跟踪数据库中的更改。