SSDT创建回滚部署脚本?

时间:2013-09-19 07:42:22

标签: sql-server tfs sql-server-data-tools

我们可以使用TFS和SSDT创建SQLServer部署脚本,但有没有办法创建回滚脚本,以便我们可以回滚部署? 感谢的

2 个答案:

答案 0 :(得分:7)

由于SSDT(和类似产品)都通过将项目中的模式与实时数据库进行比较以使数据库与模型同步来工作,因此不是创建回滚脚本的直接方法。还有关于通过部署前或部署后脚本更改/添加/删除数据的注意事项。

话虽如此,有一些选择。

  1. 每次发布​​时拍摄快照。您可以使用先前版本中的快照进行另一次比较以进行回滚。
  2. 在其他地方维护先前版本 - 也许从您的生产系统与本地计算机进行架构比较。您可以使用它来比较生产并进行回滚。
  3. 在发布之前生成现有系统的dacpac(使用SQLPackage或SSDT来执行此操作)。如果出现问题,您可以使用它将该版本的架构部署回数据库。
  4. 在发布之前拍摄数据库快照。最好的情况是,您不需要它并可以删除快照。最坏的情况是,您可以使用它来回滚。当然,您需要注意空间和IO,因为您将在其他地方维持原始状态。
  5. 在多个环境中运行更改,以最大限度地减少回滚的需要。理想情况下,如果您通过开发,质量检查和暂存/用户验收环境运行此代码,那么您的代码和版本应该足够稳固,以便能够毫无问题地发布。
  6. 您需要相应地编码以回滚数据更改。由于每个场景都不同,这可能会有点棘手。您需要确保编写的脚本可以撤消发布中的任何更改。如果您插入了一行,则需要一个回滚脚本来删除它。如果您更新了大量数据,则需要备份该数据或以其他方式将其恢复。

答案 1 :(得分:1)

在对数据库项目进行任何更改之前,我会拍摄一张快照(一个dacpac),我可以将修改后的数据库项目与之比较,以生成一个发布脚本。虽然交换源和目标以进行反向模式比较容易,但我发现它不会让我从反向比较中生成更新脚本(这将是回滚脚本) ,大概是因为目标是一个数据库项目。

要解决该问题并生成回滚脚本,请执行以下操作:

  1. 将修改后的数据库项目部署到我的(localdb)开发数据库;

  2. 从更改前的源代码管理中检出数据库项目的先前版本;

  3. 运行从先前版本的数据库项目到(localdb)开发数据库的模式比较;

  4. 使用架构比较生成更新脚本。此更新脚本将是一个回滚脚本。

  5. 虽然能够更直接地生成回滚脚本会很好,但上面的四步过程只需不到五分钟。