3

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

4

2 回答 2

7

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

话虽如此,有一些选择。

  1. 每次发布时拍摄快照。您可以使用先前版本中的该快照进行另一次比较以进行回滚。
  2. 在其他地方维护一个以前的版本——也许从你的生产系统与你的本地机器进行模式比较。您可以使用它与生产进行比较并进行回滚。
  3. 在发布之前生成现有系统的 dacpac(使用 SQLPackage 或 SSDT 来执行此操作)。如果出现问题,您可以使用它将该版本的模式部署回数据库。
  4. 在发布之前拍摄数据库快照。最佳情况下,您不需要它并且可以删除快照。最坏的情况,你可以用它来回滚。当然,您需要注意空间和 IO,因为您将在其他地方保持原始状态。
  5. 在多个环境中运行您的更改,以最大程度地减少回滚的需要。理想情况下,如果您已经通过开发、QA 和登台/用户验收环境运行此程序,您的代码和发布应该足够稳固,以便能够毫无问题地发布。

您需要相应地编码以回滚数据更改。这可能有点棘手,因为每种情况都不同。您需要确保编写的脚本可以撤消发布中的任何更改。如果您插入了一行,则需要一个回滚脚本来删除它。如果您更新了一堆数据,则需要备份该数据或通过其他方式将其取回。

于 2013-09-21T00:01:37.167 回答
1

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

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

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

  2. 在进行更改之前,从源代码控制中检查数据库项目的先前版本;

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

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

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

于 2014-10-31T03:34:16.247 回答