代码之家  ›  专栏  ›  技术社区  ›  devlife

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

  •  0
  • devlife  · 技术社区  · 15 年前

    我的公司将虚拟机用于我们的web/app服务器。这允许在出现问题时非常容易地回滚部署。但是,如果应用服务器部署也需要数据库部署,并且我们必须回滚,那么我有点茫然。如何在不丢失数据的情况下回滚数据库架构更改?我能想到的唯一一件事是编写一个脚本,它将表/列拖放/还原回其原始状态。这真的是最好的方法吗?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Community CDub    8 年前

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

    然而,假设这样的回滚是有意义的,它意味着您试图保留的数据独立于您想要恢复的模式更改。

    解决这一问题的一种方法是:

    • 仅备份数据(脚本),
    • 将模式还原为旧模式,然后
    • 恢复数据

    如果模式更改不会使创建的脚本无效(例如,更改列的数量是很棘手的),那么上述方法将很好地工作。

    这个 question 在MS SQL中提供用于生成脚本的工具的详细信息。

        2
  •  2
  •   Hans Olsson    15 年前

    但是,如果确实删除了列,那么您将丢失数据,因为这些列/表(假定)将包含一些数据。由于我假定任何回滚都是临时的,因为发现了一个bug,所以在修复错误的同时进行回滚,然后或多或少地重新安装相同的更改,如果您丢失了数据,并且在修复系统时必须重新输入,那么用户可能会非常不安。

    我建议您只允许添加表和列,不允许修改或删除,然后您可以只回滚代码并保持数据原样,如果您有大量的回滚,您可能最终会得到一些未使用的列,但这种情况不会经常发生,因为有人错误地添加了表/列,在这种情况下,DBA可以手动取出。