我正在对现有数据库进行一些架构更改。

我备份了数据库以获得开发副本,并进行了更改。我将创建一个滚动脚本来在单个事务中迁移生产计算机上的更改。

是否有创建回滚脚本以防止出现部署问题的最佳实践?在我使用以下模式手写之前:

  • 删除新的约束和索引
  • 更改表以删除新列
  • 删除添加的表
  • 提交交易

有更好的方法吗?

有帮助吗?

解决方案

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

其他提示

你错过了第五步

  • 删除新的约束和索引
  • 更改表以删除新列
  • 删除添加的表
  • 提交交易
  • 在生产中运行脚本之前对其进行彻底测试

更有效的方法是在更改发生时注册它们,例如 回报率 迁移 . 。对于每个数据库更改,您创建一个脚本,该脚本将应用更改并将其回滚(当然,由您选择)。然后,您可以像代码一样对这些脚本进行版本控制。

此外,如果您在数据库中保留版本号,则可以通过使用版本号标识每个脚本并根据执行的操作增加或减少数据库中的版本号,从而使其更加自动化。

如果它是一个相对较小的数据库,只需在应用升级之前进行备份。如果一切都失控了,你就进行恢复。

一旦它上线并输入新数据,您无论如何都无法真正将其回滚。你只需要解决问题。

如果您使用 Redgate 的 SQL Compare 等工具,则可以以两种方式运行两个数据库之间的比较,并使用这两种方式创建您需要的脚本。dev 到 prod 脚本将包含您所做的更改,prd 到 dev 脚本将返回到原始生产数据库状态。这可以确保您也不会忘记两个脚本中的任何内容。

使用 SQL Server 2005 或更高版本,您还可以创建数据库快照,以便您随时返回到该状态。请参阅此页面了解更多信息:

http://msdn.microsoft.com/en-us/library/ms175158.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top