问题描述
我们可以用TFS&SSDT创建一个SQLServer部署脚本,但是有没有办法创建一个回滚脚本,这样我们就可以回滚部署呢?谢谢
we can create a SQLServer deployment script with TFS&SSDT, but is there a way to create a rollback script, so that we can roll back the deployment?Thank's
推荐答案
由于 SSDT(和类似产品)都是通过将项目中的架构与实时数据库进行比较来使数据库与模型同步来工作的,因此没有创建回滚脚本的直接方法.还需要考虑通过部署前或部署后脚本更改/添加/删除的数据.
As SSDT (and similar products) all work by comparing the schema in the project against a live database to bring the database in sync with the model, there's not a direct way to create a rollback script. There are also considerations regarding data changed/added/removed through pre or post-deploy scripts.
话虽如此,有几个选择.
That being said, there are a handful of options.
- 每次发布时都拍一张快照.您可以使用先前版本中的快照进行另一次比较以进行回滚.
- 在别处维护以前的版本 - 可能会从您的生产系统与您的本地机器进行架构比较.您可以使用它来与生产进行比较并进行回滚.
- 在发布之前生成现有系统的 dacpac(使用 SQLPackage 或 SSDT 来执行此操作).如果出现问题,您可以使用它将该版本的架构部署回数据库.
- 在发布前拍摄数据库快照.最好的情况是,您不需要它并且可以删除快照.最坏的情况,你可以用它来回滚.当然,您需要注意空间和 IO,因为您将在其他地方保持原始状态.
- 在多个环境中运行您的更改,以尽量减少回滚的需要.理想情况下,如果您已在开发、质量检查和登台/用户验收环境中运行此程序,那么您的代码和版本应该足够可靠,以便能够毫无问题地发布.
您需要相应地编码以回滚数据更改.这可能有点棘手,因为每个场景都不同.您需要确保编写的脚本可以撤消发行版中的任何更改.如果您插入了一行,您将需要一个回滚脚本来删除它.如果您更新了大量数据,则需要备份该数据或通过其他方式将其恢复.
You'll need to code accordingly for rolling back data changes. That could be a bit trickier as each scenario is different. You'll need to make sure that you write a script that can undo whatever changes were part of your release. If you inserted a row, you'll need a rollback script to delete it. If you updated a bunch of data, you'll either need a backup of that data or some other way to get it back.
这篇关于SSDT 创建回滚部署脚本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!