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

时间:2008-12-30 17:57:37

标签: sql sql-server-2005 tsql rollback

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

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

是否存在创建回滚脚本的最佳做法,以解决部署问题?在我用手写之前,使用以下模式:

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

有更好的方法吗?

5 个答案:

答案 0 :(得分:6)

你错过了第五步

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

更有效的方法是在RoR migrations do发生变更时进行注册。对于每个数据库更改,您创建一个脚本,该脚本将应用更改并将其回滚(当然,根据您的选择)。然后,您可以像控制代码那样将这些脚本置于版本控制之下。

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

答案 1 :(得分:4)

基本上就是这样,除了你的方法之外,我认为还有很多东西需要补充。这就是我们在公司中的工作方式,我们开发人员负责创建脚本和回滚脚本,我们负责让DB保持与应用初始更改之前相同的状态。然后DBA在生产中运行它,如果遇到问题,他们将运行回滚脚本并且一切都恢复正常。请记住依赖项和更改对象的顺序,然后向后创建回滚脚本。

答案 2 :(得分:1)

如果它是一个相对较小的数据库,只需在应用升级之前进行备份。如果一切都变得混乱,你会恢复。

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

答案 3 :(得分:1)

如果您使用Redgate的SQL Compare之类的工具,您可以通过两种方式运行两个数据库之间的比较,并使用它们来创建所需的脚本。 dev to prod脚本将具有您正在进行的更改,并且prd to dev脚本将返回到原始生产数据库状态。这可以确保您不会忘记任何一个脚本中的任何内容。

答案 4 :(得分:0)

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

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