2008-12-30 37 views
5

我正在对现有数据库进行一些模式更改。创建SQL Server回滚脚本的最佳方法?

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

是否有创建回滚脚本的最佳做法是否包含部署问题?我已经使用以下模式写入之前,然后用手:

  • 丢弃新的约束和索引
  • 变更表删除新列
  • 删除添加的表
  • 提交交易

有更好的方法吗?

回答

4

基本上就是这样,我认为除了你的方法外,还有很多东西可以补充。这就是我们在公司中的工作方式,我们的开发人员负责创建脚本和回滚脚本,并且我们负责将数据库保留在应用初始更改之前的相同状态。然后数据库管理员在生产环境中运行它,如果有任何问题,他们将运行回滚脚本,一切恢复正常。请记住依赖关系以及更改对象的顺序,然后向后创建回滚脚本。

1

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

一旦它开始生效并输入新数据,您无论如何都无法真正回滚它。你只需要解决这些问题。

+0

我们不能创建备份和从本机上的备份恢复。它需要向前和向后作为交易。 – FlySwat 2008-12-30 18:10:50

4

你缺少第五步

  • 丢弃新的约束和索引
  • 变更表删除新列
  • 删除添加的表
  • 提交交易
  • 测试地狱出来的在生产中运行它之前的脚本

更有效的方法是在发生更改时将其注册为RoRmigrationsdo。对于每个DB更改,您都会创建一个脚本,该脚本将应用更改并将其回滚(当然,您可以选择)。然后您可以在版本控制下使用这些脚本,就像您的代码一样。

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

1

如果您使用像Redgate的SQL Compare这样的工具,您可以两种方式在两个数据库之间运行比较,并使用两者来创建所需的脚本。 prod脚本的开发人员将会对您所做的更改进行更改,并且prd to dev脚本将返回到原始生产数据库状态。这可以确保您不会在任何脚本中遗忘任何内容。