java - Flyway 4.2.0 Oracle 11g 中多个节点并行故障

标签 java oracle11g flyway

我有多个应用程序服务器配置为在启动时运行 Flyway。每台服务器都尝试在同一 Oracle 11g 数据库中的多个架构中应用同一组迁移。这些服务器同时启动。这在大多数情况下都有效。然而,有时服务器会在迁移过程中失败,因为它遇到了唯一约束违规。

无法在元数据表“FOO”中插入版本“0”的行。“SCHEMA_VERSION”

SQL 状态:23000 错误代码:1 消息:ORA-00001:违反了唯一约束(FOO.SCHEMA_VERSION_pk)

    at org.flywaydb.core.internal.metadatatable.MetaDataTableImpl.addAppliedMigration(MetaDataTableImpl.java:242)
    at org.flywaydb.core.internal.metadatatable.MetaDataTableImpl.addBaselineMarker(MetaDataTableImpl.java:334)
    at org.flywaydb.core.internal.command.DbBaseline$2.call(DbBaseline.java:135)
    at org.flywaydb.core.internal.command.DbBaseline$2.call(DbBaseline.java:112)
    at org.flywaydb.core.internal.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:75)
    at org.flywaydb.core.internal.command.DbBaseline.baseline(DbBaseline.java:112)
    at org.flywaydb.core.Flyway$1.execute(Flyway.java:990)
    at org.flywaydb.core.Flyway$1.execute(Flyway.java:971)
    at org.flywaydb.core.Flyway.execute(Flyway.java:1464)
    at org.flywaydb.core.Flyway.migrate(Flyway.java:971)

...

我认为 Flyway 能够根据以下内容处理这种情况:

https://flywaydb.org/documentation/faq#parallel

flyway 实例不应该检测到架构版本表已锁定并移至下一个架构吗?

是否有一个设置可以确保架构版本被锁定,或者这是一个错误?

OracleTable 类以独占模式锁定表。是否应该添加 NOWAIT 子句并处理任何由此产生的 Oracle 异常?

最佳答案

它应该可以工作。我们在每次构建时都对此进行测试,并且没有NOWAIT 的行为就是我们想要的行为(阻塞直到锁被释放)。如果您可以可靠地重现此问题或在我们的代码中看到明显的错误,那么请务必在问题跟踪器中提交包含必要详细信息的错误。

关于java - Flyway 4.2.0 Oracle 11g 中多个节点并行故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45110617/

相关文章:

mysql - 在 Flyway 脚本中安全地重命名 MySQL 表名

Java 正则表达式不工作?

sql - 在 Oracle 中连接表(多个外连接)

flyway - 我们可以使用flyway在多个数据库上并行部署sql代码吗

oracle - 有免费的 Oracle 数据库模拟器吗?

sql - 每行或每条语句的 MERGE 语句唯一索引/约束验证?

sql - Flyway迁移不适用于gradle

java - 从android应用程序中的php文件读取JSON数据

java - hibernate 应用程序是域驱动的吗?

Java 泛型 : Calling generic Method "...is not applicable for the arguments..."