Mavenは、変更セットで変更が行われなかった場合でもliquibase検証が失敗します。
私のデータベースはOracleです。
状況:
DBの変更ログテーブルには、変更セット<changeSet id="1" author="me" dbms="Oracle">
のレコードがありました。
その後、間違って別のチェンジセットを追加しました<changeSet id="1" author="me" dbms="hsqldb">
Liquibaseスクリプトの再実行Mavenはチェックサム検証エラーを発生させました。
次に、hsqldb changeSetを<changeSet id="2" author="me" dbms="hsqldb">
に変更しました
Mavenはまだチェックサム検証エラーを起動しています。
次に、DBの最初のchangeSetチェックサムを現在のcheckSumに手動で変更し、スクリプトを正常に実行しました。
すべてが素晴らしく見えますが、アプリケーション全体を再デプロイしてliquibaseスクリプトを実行すると、最初のchangeSetのチェックサムは6ステップ前と同じです。
スクリプトがデータベース内のshouldを正しく反映していると確信している場合は、 liquibase:clearCheckSums mavenゴール。これによりすべてがクリーンアップされます。
チェックサム検証エラーはliquibaseによってスローされ、データベースに適用された変更がliquibaseチェンジセットファイル内で指定された同じコンテンツと一致しなくなったことを示します。
これは、動作不良の仕様ファイルを検出するために設計された安全対策であり、開発中に簡単に発生する可能性があります。問題を修正する最良の方法は、すべてのオブジェクトを削除し、次のように開発環境に対してliquibaseを実行することです。
mvn liquibase:dropAll liquibase:update
警告-これにより、スキーマ内のallオブジェクトが削除されます。テーブル内のすべてのデータが失われ、 Liquibaseによって管理されていないオブジェクト。 drop-all goal のドキュメント
変更セットの変更を実際にサポートしたい場合があります。このような状況では、liquibaseは、データベースインスタンスに対して変更セットを選択的に適用する "runOnChange" 属性をサポートします。
私の場合、Liquibaseがすべてのchagelogsをデータベーステーブルに書き込むことを忘れていました。
[〜#〜] databasechangelog [〜#〜]テーブルに移動し、chagelogsを手動で削除します。
私はこれと格闘しているので、これと同じ問題を抱えている人々にとってそれをより簡単にしたいと思います。
<project ...>
<plugins>
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>*****</version>
<configuration>
<changeLogFile>src/main/resources/mychangelogfile.xml</changeLogFile>
<driver>Oracle.jdbc.driver.OracleDriver</driver>
<url>jdbc:Oracle:thin:@//X.X.X.X:PORT/XE</url>
<username>yourusername</username>
<password>password</password>
</configuration>
<executions>
<execution>
<goals>
<goal>clearCheckSums</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</project>
****バージョン3.2.0で使用したURLは、適切なIPADDRESSとPORTに置き換えられます。
最後にmvn liquibase:clearCheckSums
を実行します
それが役に立てば幸い!
ここの誰もがこれを修正する方法について話していますが、それがあなたのために起こるかもしれない典型的なシナリオを共有させてください。
短い答え:何らかの理由で行区切り文字が変更されると、チェックサム検証エラーが発生する可能性があり、コードの変更では表示されません。
なぜそれが私に起こったのですか?以下をお読みください。
Tomcatサーバーがあり、複数の人が時々WAR展開に関与しているとします。誰もがLINUXでINTELLIJ IDEAを使用しますが、チームメンバーの1人が何らかの理由でWINDOWSに切り替えます。 IDEAはCRLFですが、以前のビルドはすべて、LF行区切り文字を使用するLINUXマシンからビルドされました。
行区切り文字の変更は、SQLファイルも含むすべてのテキストファイルに影響します。あなたはあなたのliquibaseスクリプトで私のチームと同じように以下を使用したかもしれません
changeSet(author: "aditya", id: "1335831637231-1") {
sqlFile( path: "liquibase/quartz_Oracle_tables.sql", "stripComments": true)
}
また、ファイルのチェックサムは、データベースに既に保存されているチェックサムと一致せず、チェックサム検証エラーがスローされます。