2017-07-14 3 views
1

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)

verletzt
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) 

...

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?

Antwort

0

Es sollte funktionieren. Wir testen dies mit jedem Build und das Verhalten ohne NOWAIT ist das, das wir wollten (Block bis Lock freigegeben wird). Wenn Sie dies zuverlässig reproduzieren können oder einen klaren Fehler in unserem Code sehen, dann bitte auf jeden Fall einen Fehler mit den notwendigen Details im Issue Tracker einreichen.

+0

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