321 votes

Blocage de Liquibase - raisons ?

J'ai ce problème lorsque je fais tourner beaucoup de liquibase-scripts contre un serveur Oracle. Je suis SomeComputer.

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)

Se pourrait-il que le nombre de sessions/transactions simultanées soit atteint ? Quelqu'un a-t-il une idée ?

3 votes

Avez-vous tué la JVM pendant que liquibase tenait le verrou ? C'est le seul cas où cela se produit pour moi.

0 votes

Il semble qu'un autre PC soit impliqué : Konsultpc74. Peut-être avez-vous lancé liquibase sur deux PC différents en même temps ? Sinon, avez-vous une explication pour l'autre PC ?

0 votes

J'ai édité les logs et j'ai accidentellement oublié de changer cela en SomeComputer.

3voto

CodingFreak Points 618

Parfois, le fait de tronquer ou de supprimer la table DATABASECHANGELOGLOCK ne fonctionne pas. J'utilise une base de données PostgreSQL et j'ai rencontré ce problème à plusieurs reprises. Ce que je fais pour résoudre ce problème est d'annuler les instructions préparées qui s'exécutent en arrière-plan pour cette base de données. Essayez d'annuler toutes les instructions préparées et essayez à nouveau de modifier la base de données.

SQL :

SELECT gid FROM pg_prepared_xacts WHERE database='database_name';

Si l'instruction ci-dessus renvoie un enregistrement, alors annulez cette instruction préparée avec l'instruction SQL suivante.

ROLLBACK PREPARED 'gid_obtained_from_above_SQL';

2voto

Mykhaylo Adamovych Points 1907

Vous pouvez en toute sécurité supprimer la table manuellement ou en utilisant une requête. Elle sera recréée automatiquement.

DROP TABLE DATABASECHANGELOGLOCK;

1voto

g.momo Points 484

Sur postgres 12 J'avais besoin d'utiliser cette commande :

UPDATE DATABASECHANGELOGLOCK SET LOCKED=false, LOCKGRANTED=null, LOCKEDBY=null where ID=1;

0voto

Danny Points 106

Veuillez laisser Liquibase gérer ses propres tables. La bonne chose à faire, comme le mentionne l'utilisateur 1434769, est d'utiliser la commande releaseLocks de Liquibase.

En utilisant Gradle, ce serait : gradlew releaseLocks

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X