Ich habe mehrere Anwendungsserver konfiguriert, um Flyway beim Start zu starten. Jeder Server versucht, dieselben Migrationen auf mehrere Schemas in derselben Oracle 11g-Datenbank anzuwenden. Diese Server werden gleichzeitig gestartet. Dies funktioniert die meiste Zeit. Gelegentlich schlägt jedoch ein Server während der Migration fehl, da er auf eine eindeutige Integritätsverletzung trifft.Flyway 4.2.0 Mehrere Knoten in paralleler Fehler mit Oracle 11g
kann nicht Zeile für die Version einfügen '0' in Metadatentabelle "FOO" "SCHEMA_VERSION"
SQL-Status. 23000 Fehlercode: 1 Nachricht: ORA-00001: eindeutige Einschränkung (FOO.SCHEMA_VERSION_pk)
verletztat 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)
...
ich dachte, dass Zugweg der Lage wäre, diese Situation auf der folgenden Basis zu behandeln:
https://flywaydb.org/documentation/faq#parallel
Sollte eine Flyway-Instanz nicht erkennen, dass die Schemaversionstabelle gesperrt ist und auf das nächste Schema wechseln?
Gibt es eine Einstellung, die sicherstellen kann, dass die Schemaversion gesperrt ist oder ist das ein Fehler?
Die OracleTable-Klasse sperrt die Tabelle im exklusiven Modus. Sollte es die NOWAIT-Klausel hinzufügen und jede resultierende Oracle-Ausnahme behandeln?
In meinem Fall versuchen beide Flyway-Instanzen die gleichen Migrationen auszuführen. Nehmen wir an, der erste Zug wartet auf den zweiten Zug, der gerade V1.0.0 in das Schema FOO migriert. Es scheint, dass der erste Flugweg versucht, V1.0.0 zu migrieren, nachdem der zweite Flug beendet wurde und die Tabelle entsperrt hat, was zu der eindeutigen Einschränkungsverletzung führt. Es scheint, dass es vor der Migration überprüfen sollte, wie es normalerweise tut. – user581638