Flyway 4.2.0使用Oracle 11g并行失败的多个节点

时间:2017-07-14 19:49:50

标签: java oracle11g flyway

我有多个应用程序服务器配置为在启动时运行flyway。每个服务器都尝试在同一Oracle 11g数据库中的多个模式中应用同一组迁移。这些服务器同时启动。这大部分时间都有效。但是,有时,服务器在迁移期间会因为遇到唯一的约束违规而失败。

无法为版本' 0'插入行在元数据表" FOO"。" 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

飞路实例是否应检测到架构版本表已锁定并移至下一个架构?

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

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

1 个答案:

答案 0 :(得分:0)

它应该工作。我们用每个构建测试这个,没有NOWAIT的行为是我们想要的(阻塞直到锁定被释放)。如果你可以可靠地重现这个或者在我们的代码中看到一个明显的错误,那么请务必在问题跟踪器中提交必要的详细信息。