Liquibase-Sperre - Gründe?
Bekomme ich beim ausführen eine Menge von liquibase-Skripte gegen eine Oracle-server. SomeComputer ist mir.
Waiting for changelog lock....
Waiting for changelog lock....
Waiting for changelog lock....
Waiting for changelog lock....
Waiting for changelog lock....
Waiting for changelog lock....
Waiting for changelog lock....
Liquibase Update Failed: Could not acquire change log lock. Currently locked by SomeComputer (192.168.15.X) since 2013-03-20 13:39
SEVERE 2013-03-20 16:59:liquibase: Could not acquire change log lock. Currently locked by SomeComputer (192.168.15.X) since 2013-03-20 13:39
liquibase.exception.LockException: Could not acquire change log lock. Currently locked by SomeComputer (192.168.15.X) since 2013-03-20 13:39
at liquibase.lockservice.LockService.waitForLock(LockService.java:81)
at liquibase.Liquibase.tag(Liquibase.java:507)
at liquibase.integration.commandline.Main.doMigration(Main.java:643)
at liquibase.integration.commandline.Main.main(Main.java:116)
Könnte es sein, dass die Anzahl der gleichzeitigen Sitzungen/Transaktionen erreicht werden? Hat jemand irgendwelche Ideen?
Kommentar zu dem Problem
Habt Ihr tötet die JVM während liquibase hielt die Sperre? Das ist der einzige Fall, wo dies der Fall für mich.
Es scheint ein weiterer PC beteiligt: Konsultpc74. Vielleicht lief liquibase von verschiedenen PCs gleichzeitig? Wenn nicht, haben Sie eine Erklärung für den anderen PC?
Ich bearbeitete die Protokolle und ich habe versehentlich vergessen zu ändern, zu SomeComputer
Sind Sie ausführt, die änderungen gleichzeitig? Ich dachte, jede Datei und jeder änderungssatz in der es ausgeführt wird. Zumindest ich benutze es auf diese Weise. Ich habe einen master-changeset-Datei, die enthält alle anderen und alles wird laufen.
InformationsquelleAutor der Frage Peter Isberg | 2013-03-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Manchmal, wenn die update-Anwendung wird abrupt gestoppt, dann das Schloss stecken bleibt.
Dann läuft
gegen die Datenbank hilft.
Oder können Sie einfach fallen die
DATABASECHANGELOGLOCK
Tisch, wird es neu erstellt werden.InformationsquelleAutor der Antwort Adrian Ber
Ist es möglicherweise aufgrund einer getötet liquibase Prozess nicht die Freigabe seiner Sperre auf der DATABASECHANGELOGLOCK Tabelle. Dann,
könnte Ihnen helfen.
Edit: @Adrian Ber die Antwort liefert eine bessere Lösung als diese. Tun Sie dies nur, wenn Sie irgendwelche Probleme haben, tut, ist seine Lösung.
InformationsquelleAutor der Antwort emisilva
Das problem war der fehlerhafte Umsetzung von SequenceExists in Liquibase. Da die änderungen mit diesen Aussagen nahm eine sehr lange Zeit und wurde versehentlich abgebrochen. Dann den nächsten Versuch der Ausführung des liquibase-Skripte, die das Schloss hielt.
Eine Arbeit um mit plain-SQL, um diese zu überprüfen statt:
Lockdata in der Tabelle gespeichert ist DATABASECHANGELOCK. Um loszuwerden, die Sperre ändern Sie einfach 1 zu 0 oder Tropfen, die Tabelle und erstellen.
InformationsquelleAutor der Antwort Peter Isberg
Ich Schätze, das war nicht die OP das Problem, aber ich lief in dieses Problem vor kurzem mit einer anderen Ursache. Als Referenz, ich war mit dem Liquibase Maven-plugin (liquibase-maven-plugin:3.1.1) mit SQL Server.
Sowieso, würde ich fälschlicherweise kopiert und eingefügt haben, eine SQL Server "use" - Anweisung in einem meiner Skripte, switches, Datenbanken, so liquibase ausgeführt wurde und die Aktualisierung der
DATABASECHANGELOGLOCK
, Erwerb des Schlosses in der richtigen Datenbank, aber dann Wechsel der Datenbanken, um die änderungen anzuwenden. Nicht nur konnte ich NICHT sehen, meine änderungen oder liquibase-audit in der richtigen Datenbank, aber natürlich, wenn ich lief liquibase wieder, es könnte nicht die Sperre, da die Sperre entlassen worden war, in die "falsche" Datenbank, und so war immer noch gesperrt, in der "richtigen" Datenbank. Ich hätte erwartet, liquibase zu prüfen, die Sperre wurde noch aufgetragen, bevor Sie Sie loslassen, und vielleicht ist das ein bug in liquibase (ich habe nicht geprüft, noch nicht), aber es kann gut angesprochen werden in späteren Versionen! Das heißt, ich vermute, es könnte als ein feature!Schon ein bisschen ein Schuljunge Fehler, ich weiß, aber ich Hebe es hier in den Fall, dass jemand läuft in das gleiche problem!
InformationsquelleAutor der Antwort DarthPablo
Manchmal abschneiden oder fallenlassen der Tabelle DATABASECHANGELOGLOCK nicht funktioniert. Ich benutze PostgreSQL-Datenbank und kam über dieses Thema eine Menge Zeit. Was Tue ich für die Lösung ist ein rollback für die prepared statements im hintergrund läuft für die Datenbank. Versuchen Sie ein rollback für alle vorbereiteten Anweisungen und versuchen, die liquibase ändert sich wieder.
SQL:
Wenn obige Anweisung gibt alle aufnehmen, dann rollback, die vorbereitete Anweisung mit der folgenden SQL-Anweisung.
InformationsquelleAutor der Antwort CodingFreak