当前位置: 首页 > 知识库问答 >
问题:

Flyway 4.2.0多节点并行故障与Oracle 11g

费朗
2023-03-14

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

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

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实例是否应该检测到模式版本表被锁定并移动到下一个模式?

是否有一个设置可以确保模式版本被锁定,或者这是一个bug?

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

共有1个答案

施梓
2023-03-14

它应该会起作用。我们在每个构建中都测试了这一点,没有NOWAIT的行为就是我们想要的(阻塞直到释放锁)。如果您能够可靠地再现这一点,或者在我们的代码中看到明显的错误,那么请务必在问题跟踪程序中提交一个bug,并提供必要的详细信息。

 类似资料:
  • 不能从其他节点上将raft目录拷贝到mananger节点上,然后重启节点。对于每一个节点ID数据目录是唯一对应的。加入Swarm时每一个节点ID只能被节点使用一次。节点ID控件是全局唯一的。 重新将manager节点加入到集群中,需要如下操作: 将节点降级为worker节点。docker node demote <NODE> 将节点移除。docker node rm <NODE> 将节点重新加入回

  • 我是卡珊德拉的新成员。 我在两台 Debian VMware 机器上创建了 2 个 cassandra 2.1 节点。在 asp.net mvc 中,我使用了 datastax 驱动程序 2.1.5,实际上没有任何问题,但是当我关闭或禁用其中一个节点上的网络时,应用程序似乎有 5 或 10 秒的延迟来自动连接其他节点。 当两个节点启动时,查询在c00:00:00.0620413秒内运行,当一个节点

  • 问题内容: 在简单情况下,如果3台服务器具有1个主服务器和2个从属服务器而没有分片。是否有使用Java和Jedis的经过验证的解决方案,该解决方案没有单点故障,并且将自动处理单个服务器(无论是主服务器还是从服务器)(自动故障转移)。例如,提升主机并在故障后重置,而不会丢失任何数据。 在我看来,这似乎应该是一个已解决的问题,但是我找不到关于它的任何代码,而仅是对实现此方法的高级描述。 谁实际覆盖并在

  • 我是个新手。js和我无法获得一个简单的POST请求来工作。我使用的是angular版本1.4。8.我的请求从未发送到服务器。相反,客户端似乎在发出请求之前出错了。我看不出我做错了什么,尽管我已经阅读了这里的文档:https://docs.angularjs.org/api/ng/service/$http#post。以下是我的相关错误信息(使用下面的代码示例生成): {“数据”:null,“状态”

  • 我正在尝试将Liquibase与Spring Boot一起使用。这是我的文件: 更改集应用良好(可以创建表)。 当我访问执行器的endpoint时,问题来了,我得到一个500错误: 无法获取Liquibase更新日志 我还得到以下日志: org.postgresql.util.PSQLException: ERROR:关系"public.databasechangelog"不存在 如果问题是用于访

  • 前几天,我们的jenkins作业中出现了一个flyway迁移失败。当我们查看数据库时,我们发现脚本已被应用,但在脚本的“schema_version”表中没有创建任何条目。我们知道这个脚本需要很长时间才能应用(修改一个包含大约70M行的表),我们使用了SQL语法,至少可以使更改不阻塞(mysql上的ALGORITHM=INPLACE)。然而,当脚本完成时,flyway返回jenkins失败,并且在