6

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

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

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

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

有更好的方法吗?

4

5 回答 5

7

你错过了第五步

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

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

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

于 2008-12-30T18:54:23.190 回答
4

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

于 2008-12-30T18:03:36.540 回答
1

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

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

于 2008-12-30T18:04:48.003 回答
1

如果您使用像 Redgate 的 SQL 比较这样的工具,您可以在两个数据库之间运行比较,并使用两者来创建您需要的脚本。dev 到 prod 脚本将包含您正在进行的更改,而 prd 到 dev 脚本将返回到原始生产数据库状态。这可确保您也不会忘记任一脚本中的任何内容。

于 2008-12-30T20:05:10.677 回答
1

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

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

于 2008-12-30T20:08:48.190 回答