Bloqueo Liquibase: ¿razones?
Me sale esto cuando ejecuto muchos scripts de liquibase en un servidor Oracle. Alguna computadora soy yo.
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)
¿Será que se ha alcanzado el número de sesiones/transacciones simultáneas? ¿Alguien tiene alguna idea?
A veces, si la aplicación de actualización se detiene abruptamente, el bloqueo permanece bloqueado.
Luego corriendo
UPDATE DATABASECHANGELOGLOCK SET LOCKED=0, LOCKGRANTED=null, LOCKEDBY=null where ID=1;
contra la base de datos ayuda.
Es posible que también necesites reemplazarlo LOCKED=0
con LOCKED=FALSE
.
O simplemente puede soltar la DATABASECHANGELOGLOCK
tabla y se recreará.
Editar junio 2020
No sigas este consejo. Ha causado problemas a muchas personas a lo largo de los años. A mí me funcionó hace mucho tiempo y lo publiqué de buena fe, pero claramente no es la forma de hacerlo. La tabla DATABASECHANGELOCK necesita tener cosas dentro, por lo que es una mala idea simplemente eliminar todo sin eliminar la tabla.
Leos Literak , por ejemplo, siguió estas instrucciones y el servidor no pudo iniciarse.
Respuesta original
Posiblemente se deba a que un proceso de liquibase cancelado no liberó su bloqueo en la tabla DATABASECHANGELOGLOCK. Entonces,
DELETE FROM DATABASECHANGELOGLOCK;
podría ayudarte.
Editar: la respuesta de @Adrian Ber proporciona una solución mejor que esta. Solo haga esto si tiene algún problema para resolver su solución.