如何在不丢失新数据的情况下回滚数据库部署?

时间:2010-05-11 12:10:22

标签: sql sql-server database deployment

我的公司为我们的网络/应用服务器使用虚拟机。如果出现问题,这可以非常容易地回滚部署。但是,如果应用服务器部署也需要数据库部署,我们必须回滚,我有点不知所措。如何在不丢失数据的情况下回滚数据库架构更改?我唯一能想到的是编写一个脚本,将表/列恢复/恢复到原始状态。这真的是最好的方式吗?

2 个答案:

答案 0 :(得分:2)

但是如果你确实删除了列,那么你将丢失数据,因为那些列/表(据说)将包含一些数据。而且由于我认为任何回滚通常都是暂时的,因为发现了一个错误,所以回滚是为了让它在修复时继续进行,然后重新安装或多或少相同的更改,如果用户可能会非常沮丧你丢失了这些数据,他们必须在系统修复后重新输入数据。

我建议您只允许添加表和列,不进行任何更改或删除,然后您可以回滚代码并保留数据,如果您有大量的回滚,可能会导致一些未使用的列,但这不应该发生,因为有人经常错误地添加了一个表/列,在这种情况下,DBA可以手动删除它们。

答案 1 :(得分:1)

一般来说,你不能这样做。

但是假设这样的回滚有意义,它意味着您尝试保留的数据独立于您想要还原的架构更改。

处理它的一种方法是:

  • 仅备份数据(脚本),
  • 将架构还原为旧架构和
  • 恢复数据

如果架构更改不会使创建的脚本无效(例如更改列数会很棘手),上面的工作就会很好。

question详细介绍了MS SQL中用于生成脚本的工具。