创建SQL Server回滚脚本的最佳方法是什么?

6
我正在对现有数据库进行模式更改。
我备份了数据库以获取一个开发副本,并进行了更改。我将创建一个单个回滚脚本,以在单个事务中迁移生产机器上的更改。
如果出现部署问题,是否有创建回滚脚本的最佳实践? 在此之前,我手工编写了以下模式:
- 删除新的约束和索引 - 更改表以删除新列 - 删除添加的表 - 提交事务
是否有更好的方法?
5个回答

7

你错过了第五个步骤

  • 删除新的约束和索引
  • 修改表以删除新列
  • 删除添加的表
  • 提交事务
  • 在生产环境运行之前对脚本进行彻底测试

更高效的方法是在发生更改时将其注册,就像RoR migrations do一样。对于每个DB更改,您都可以创建一个脚本,既可以应用更改,也可以回滚更改(当然是根据您的选择)。然后,您可以像管理代码一样将这些脚本保存在版本控制下。

此外,如果在数据库中保留版本号,则可以自动化它,通过将每个脚本与版本号相关联,并根据执行的操作增加或减少数据库中的版本号。


4

基本上就是这样了,我认为没有太多需要补充的,除非你有什么不同的做法。在我们公司,开发人员负责创建脚本和回滚脚本,并确保在应用初始更改之前将数据库保留在相同状态。然后DBA在生产环境中运行它,如果出现问题,他们会运行回滚脚本,一切都会恢复正常。只需记住对象间的依赖关系以及更改顺序,然后向后创建回滚脚本即可。


1

如果数据库比较小,只需在升级之前备份。如果出现问题,可以进行还原。

一旦上线并输入新数据,您无法回滚。您只能解决问题。


我们无法在此计算机上创建备份并从备份中恢复。它需要像事务一样向前和向后滚动。 - FlySwat

1
如果您使用像Redgate的SQL Compare这样的工具,您可以双向运行两个数据库之间的比较,并使用两者来创建所需的脚本。从开发到生产的脚本将包含您所做的更改,而从生产到开发的脚本将返回原始生产数据库状态。这确保您在任何一个脚本中都不会遗漏任何内容。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接