[database] Blocco Liquibase - ragioni?



Answers

Probabilmente è a causa di un processo di liquibase ucciso che non ha rilasciato il blocco sulla tabella DATABASECHANGELOGLOCK. Poi,

DELETE FROM DATABASECHANGELOGLOCK;

potrebbe aiutarti.

Modifica: @Adrian Ber's answer fornisce una soluzione migliore di questa. Fallo solo se hai problemi a fare la sua soluzione.

Question

Ottengo questo quando eseguo un sacco di script di liquibase contro un server Oracle. SomeComputer sono io.

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)

Potrebbe essere che il numero di sessioni / transazioni simultanee sia raggiunto? Qualcuno ha qualche idea?




Apprezzo che questo non fosse il problema dell'OP, ma di recente ho riscontrato questo problema con una causa diversa. Per riferimento, stavo usando il plugin Liquibase Maven (liquibase-maven-plugin: 3.1.1) con SQL Server.

Ad ogni modo, avevo erroneamente copiato e incollato un'istruzione "uso" di SQL Server in uno dei miei script che cambiava i database, quindi liquibase era in esecuzione e aggiornava DATABASECHANGELOGLOCK , acquisendo il blocco nel database corretto, ma poi cambiando i database per applicare le modifiche . Non solo non potevo vedere le mie modifiche o l'audit di liquibase nel database corretto, ma naturalmente, quando ho eseguito nuovamente il liquibase, non è stato possibile acquisire il blocco, poiché il blocco era stato rilasciato nel database "errato", e così è stato ancora bloccato nel database "corretto". Mi sarei aspettato che il liquibase verificasse che il lucchetto fosse ancora applicato prima di rilasciarlo, e forse questo è un bug in liquibase (non ho ancora controllato), ma potrebbe essere risolto nelle versioni successive! Detto questo, suppongo che potrebbe essere considerato una caratteristica!

Un po 'un errore da scolaro, lo so, ma lo sollevo qui nel caso qualcuno si imbatta nello stesso problema!




Related