多个实例指向同一模式的 Flyway 迁移

Posted

技术标签:

【中文标题】多个实例指向同一模式的 Flyway 迁移【英文标题】:Flyway migration with multiple instances pointing at the same schema 【发布时间】:2021-12-18 01:27:39 【问题描述】:

我们还没有使用 Flyway,但我现在正在研究它,希望在接下来的几个月内实施它。

我们希望应用程序在启动时运行迁移检查。但是,我们有两个不同的应用程序在同一个数据库中协同工作,并且每个应用程序都有多个实例。我的希望是第一个通过大门的人会将待处理记录添加到历史记录表中,而其他人也不会尝试升级看到这一点。

这是一个现实的期望吗? 我们可以依靠这种机制吗? 其他人如何处理这个问题? 谢谢。

【问题讨论】:

在哪里部署应用程序可能很重要,如果 flyway 允许您手动执行这些操作,例如为您提供会话 我还没有在 Flyway 中看到会话的概念。会研究那个。谢谢。 我相信,但我可能错了,它不是这样工作的。标记已成功部署的表的更新在完成之前不会发生。我将联系一些从事代码验证的开发人员。 【参考方案1】:

这取决于数据库。那些支持通过 JDBC 驱动程序显式获取和释放表锁的人应该在迁移开始时锁定历史表,从而阻止任何其他 Flyway 实例继续进行,并在最后释放锁。我们知道有几个数据库(CockroachDB 就是其中之一)不允许这样做,因此会插入数据库中的待处理行,然后再删除。

【讨论】:

我们正在使用 Oracle。我在flywaydb.org/documentation/database/oracle#driver 上没有看到任何提及。还有其他地方我可以验证迁移时的表锁定如何在 Oracle 中工作吗?谢谢!

以上是关于多个实例指向同一模式的 Flyway 迁移的主要内容,如果未能解决你的问题,请参考以下文章

FlyWay 迁移策略

Flyway 数据库迁移到多个模式

Flyway 3.1 数据库迁移多个模式 - Oracle 11g

使用 Flyway 和 Spring Boot 迁移具有不同生命周期的多个模式

Flyway 最佳实践:一个大型迁移脚本与多个增量脚本

Flyway 一个模式中的多个元数据表