Saya mendapatkan ini ketika menjalankan banyak skrip liku-liku terhadap server-Oracle. SomeComputer adalah aku.
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)
Mungkinkah jumlah sesi / transaksi simultan tercapai? Adakah yang punya ide?
Jawaban:
Terkadang jika aplikasi pembaruan tiba-tiba berhenti, maka kunci tetap macet.
Lalu berlari
terhadap database membantu.
Atau Anda cukup menjatuhkan
DATABASECHANGELOGLOCK
meja, itu akan dibuat kembali.sumber
0
untukFALSE
, tetapi selain itu, itu berfungsi dengan baik. Terima kasihFALSE
forb'0'
Edit Juni 2020
Jangan ikuti saran ini. Ini menyebabkan masalah bagi banyak orang selama bertahun-tahun. Itu bekerja untuk saya sejak lama dan saya mempostingnya dengan itikad baik, tetapi jelas bukan cara untuk melakukannya. Tabel DATABASECHANGELOCK perlu memuat beberapa hal di dalamnya, jadi sebaiknya hapus saja semuanya.
Leos Literak , misalnya, mengikuti instruksi ini dan server gagal memulai.
Jawaban asli
Mungkin karena proses liquibase yang terbunuh tidak melepaskan kunci pada tabel DATABASECHANGELOGLOCK. Kemudian,
mungkin bisa membantu Anda.
Sunting: Jawaban @Adrian Ber memberikan solusi yang lebih baik dari ini. Hanya lakukan ini jika Anda memiliki masalah dalam melakukan solusinya.
sumber
INSERT INTO yourdb.DATABASECHANGELOGLOCK VALUES (1, 0, null, null);
Masalahnya adalah implementasi kereta SequenceExists di Liquibase. Karena perubahan dengan pernyataan ini membutuhkan waktu yang sangat lama dan tidak sengaja dibatalkan. Kemudian coba berikutnya menjalankan skrip liku-liku-liku yang dimiliki.
Cara mengatasinya menggunakan SQL biasa untuk memeriksa ini sebagai gantinya:
Lockdata disimpan dalam tabel DATABASECHANGELOCK. Untuk menghilangkan kunci Anda cukup mengubah 1 ke 0 atau jatuhkan tabel itu dan buat ulang.
sumber
Tidak disebutkan lingkungan mana yang digunakan untuk mengeksekusi Liquibase. Dalam hal ini adalah Spring Boot 2 dimungkinkan untuk memperpanjang
liquibase.lockservice.StandardLockService
tanpa perlu menjalankan pernyataan SQL langsung yang jauh lebih bersih. Misalnya:Kode ini memberlakukan pelepasan kunci. Ini dapat berguna dalam pengaturan uji di mana panggilan rilis mungkin tidak dipanggil jika terjadi kesalahan atau ketika debugging dibatalkan.
Kelas harus ditempatkan dalam
liquibase.ext
paket dan akan diambil oleh konfigurasi otomatis Spring Boot 2.sumber
liquibase.ext
, apakah saya perlu mendefinisikan paket itu dalam proyek saya?@PostConstruct
metode dengan pesan log tetapi saya tidak melihatnya dicetak.@PostConstruct
metode? Di ForceReleaseLockService? Ini bukan layanan Musim Semi, jadi ini tidak akan diminta.Terkadang memotong atau menjatuhkan meja DATABASECHANGELOGLOCK tidak berfungsi. Saya menggunakan database PostgreSQL dan sering menemukan masalah ini. Apa yang saya lakukan untuk menyelesaikannya adalah mengembalikan pernyataan yang sudah disiapkan yang berjalan di latar belakang untuk database itu. Cobalah untuk mengembalikan semua pernyataan yang disiapkan dan mencoba perubahan liquibase lagi.
SQL:
Jika pernyataan di atas mengembalikan catatan apa pun, maka kembalikan pernyataan yang disiapkan itu dengan mengikuti pernyataan SQL.
sumber
Anda dapat dengan aman menghapus tabel secara manual atau menggunakan kueri. Ini akan dibuat ulang secara otomatis.
sumber
Saya menghargai ini bukan masalah OP, tetapi saya mengalami masalah ini baru-baru ini dengan alasan yang berbeda. Sebagai referensi, saya menggunakan plugin Liquibase Maven (liquibase-maven-plugin: 3.1.1) dengan SQL Server.
Ngomong-ngomong, saya keliru menyalin dan menempelkan pernyataan "gunakan" SQL Server ke dalam salah satu skrip saya yang memindahkan basis data, jadi liquibase sedang menjalankan dan memutakhirkannya
DATABASECHANGELOGLOCK
, memperoleh kunci dalam basis data yang benar, tetapi kemudian memindahkan basis data untuk menerapkan perubahan. Bukan saja saya TIDAK bisa melihat perubahan atau audit liquibase di database yang benar, tetapi tentu saja, ketika saya menjalankan liquibase lagi, itu tidak dapat memperoleh kunci, karena kunci telah dirilis di database "salah", dan begitu juga masih terkunci di database "benar". Saya mengharapkan liquibase untuk memeriksa kunci masih diterapkan sebelum melepaskannya, dan mungkin itu adalah bug dalam liquibase (saya belum memeriksa), tetapi mungkin juga dialamatkan dalam versi yang lebih baru! Yang mengatakan, saya kira itu bisa dianggap fitur!Cukup banyak kesalahan anak sekolah, saya tahu, tapi saya angkat di sini kalau-kalau ada yang mengalami masalah yang sama!
sumber