答案 1
虽然 Flyway 支持回滚(作为仅限商业的功能),但不鼓励使用它:
https://flywaydb.org/documentation/command/undo
虽然撤消迁移的想法很好,但不幸的是,它有时会在实践中崩溃。一旦你有破坏性的改变(删除,删除,截断,...),你就会开始陷入困境。即使您不这样做,您最终也会创建用于还原备份的自制替代方案,这些替代方案也需要进行适当的测试。
撤消迁移假定整个迁移成功,现在应撤消。这无助于在没有 DDL 事务的数据库上失败的版本化迁移。为什么?迁移可能随时失败。如果您有 10 个语句,则第 1 个、第 5 个、第 7 个或第 10 个语句可能会失败。根本没有办法提前知道。相比之下,编写撤消迁移是为了撤消整个版本化迁移,在这种情况下无济于事。
我们认为更可取的另一种方法是保持数据库与当前在生产中部署的所有代码版本之间的向后兼容性。这样,失败的迁移就不会成为灾难。旧版本的应用程序仍与数据库兼容,因此您只需回滚应用程序代码、进行调查并采取纠正措施即可。
这应该得到一个适当的、经过充分测试的备份和恢复策略的补充。它独立于数据库结构,一旦经过测试并证明其有效,任何迁移脚本都不能破坏它。为了获得最佳性能,如果您的基础架构支持此功能,我们建议您使用基础存储解决方案的快照技术。特别是对于较大的数据量,这比传统的备份和恢复快几个数量级。
推荐
-
-
版本控制数据库的正确策略 我正在阅读此,我对所写的5篇文章有疑问。据我所知,您在包含所有SQL DDL语句的大型基线脚本上创建。完成此操作后,您可以在单独的脚本中跟踪每个更改。 但是,我不明白脚本文件的名称如
-
BoneCP 中分区计数的更好解释 来自 BoneCP 官方文档: 分区计数为了减少锁争用,从而提高性能,每个传入的连接请求都会从具有线程相关性的池(即 pool[threadId % partition_count])中选取一个连接。此数字越高,对于具有大量
-
JPA/休眠 DDL 生成;查尔 vs. 瓦尔查尔 我有一个JPA / Hibernate数据模型,我正在使用Hibernate hbm2ddl工具来生成数据库DDL。我有一些字符串应该是CHAR,有些可能是数据库中的VARCHAR。我想尽量减少对DDL的手动编辑(我意识到有些必须发生)
-
将 JAXB 映射到数据库表的最佳方法 我有一个入站xml,我使用xjc工具将其映射到JAXB对象(构建pojos) 我想知道将这些对象映射到各种表的最佳方法是什么。 一个对象/ Xml可以映射到多个表,我认为规则休眠。作为一个基本的解决
标签