代码之家  ›  专栏  ›  技术社区  ›  Greg Beech

数据库迁移“停止”的意义是什么?

  •  5
  • Greg Beech  · 技术社区  · 16 年前

    正如所有的数据库一样,我们的源代码使用源代码控制进行版本控制。该数据库使用RedGate的比较工具生成的一系列SQL脚本进行升级,这与最近出现的众多数据库迁移框架中的“up”迁移基本相同。

    但是这些框架中的“向下”迁移有什么意义呢?通常情况下,“向上”迁移的代码非常复杂(通常随着功能的发展而进行复杂的数据迁移),我很难理解将“向下”迁移的代码全部反向编写的目的。这肯定是我从未觉得有必要的。我是不是遗漏了什么。。。?

    4 回复  |  直到 16 年前
        1
  •  14
  •   Aaronaught    16 年前

    这里的相关问题似乎是:

    • 为什么脚本回滚比从升级前立即执行的备份进行完整数据库还原更可取?

    我可以想到几个原因:

    1. 数据库非常大(比如几百GB),您的公司无法承担完整恢复所涉及的停机时间和/或管理开销。

    2. 引入了一个直到投产一两周才被发现的bug。如果你以前从未经历过这种情况,那你就幸运了。一旦在新数据库中有了一周的事务,就可以忘记从备份中恢复。

    3. 这个错误直到后来才被发现 进入释放。换句话说,你甚至不知道 再也不用备份了,你就正式进入了损害控制/灾难恢复模式。我从未经历过,但我听过很多故事。这是一个可怕的想法-你如何消除所有已经造成的伤害?在这种情况下,您的降级可能并不完美,但仍可能比其他方法更好。

    4. 比恢复时间短。有些事情可能需要几个小时才能升级,例如创建新索引或添加新列,但降级(删除)可能只需要几秒钟。

    5. 您正在部署到客户站点。其中一些可能根本没有备份(是的,这很可怜,但你对此无能为力)。如果其中一个需要回滚,这是您唯一的选择。

        2
  •  7
  •   itowlson    16 年前

        3
  •  1
  •   mopoke    16 年前
    1. 回滚。你把所有的东西都投入到生产中,它会爆炸——向下迁移是一个很好的安全网。
    2. 或者您正在使用多个代码分支进行开发—您可以根据自己的需要在不同版本之间来回切换。
        4
  •  0
  •   David Atkinson    16 年前

    但是,您可以通过恢复备份并使用SQL数据比较跨数据库复制附加数据来绕过上述问题。