58

Maven は、変更セットに変更が加えられていなくても、liquibase の検証に失敗します。

私のデータベースはオラクルです。

状況:

  1. DB changelog テーブルには changeset のレコードがありました<changeSet id="1" author="me" dbms="oracle">

  2. その後、誤って別の変更セットを追加しました<changeSet id="1" author="me" dbms="hsqldb">

  3. Liquibase スクリプトの再実行 Maven がチェックサム検証エラーを発生させました。

  4. 次に、hsqldb changeSet を次のように変更しました<changeSet id="2" author="me" dbms="hsqldb">

  5. Maven はまだチェックサム検証エラーを発生させています。

  6. 次に、DB の最初の changeSet チェックサムを手動で現在の checkSum に変更し、スクリプトを正常に実行しました。

すべてがうまく見えますが、アプリケーション全体を再デプロイして liquibase スクリプトを実行すると、最初の changeSet のチェックサムは 6 ステップの前と同じです。

4

9 に答える 9

84

スクリプトがデータベースにあるべきものを正しく反映していると確信している場合は、 liquibase:clearCheckSums Maven ゴールを実行すると、すべてがクリーンアップされます。

于 2012-04-03T19:56:11.127 に答える
23

チェックサム検証エラーは、データベースに適用された変更がliquibaseチェンジセットファイル内で指定された同じコンテンツと一致しなくなったことを示すためにliquibaseによってスローされます。

これは、動作に問題のある仕様ファイルを検出するために設計された安全対策であり、開発中に簡単に発生する可能性があります。この問題を解決する最善の方法は、すべてのオブジェクトを削除し、次のように開発環境に対してliquibaseを実行することです。

mvn liquibase:dropAll liquibase:update

警告-これにより、スキーマ内のすべてのオブジェクトが削除されます。テーブル内のすべてのデータ、およびLiquibaseによって管理されていないオブジェクトはすべて失われます。ドロップオールゴールのドキュメント

チェンジセットの変更を実際にサポートしたい場合があります。そのような状況では、liquibaseはデータベースインスタンスに対してチェンジセットを選択的に適用する「runOnChange」属性をサポートします。

于 2012-04-03T19:46:43.847 に答える
4

私はこれに苦労しているので、同じ問題を抱えている人が簡単にできるようにしたいと思います:

  1. 重要!、liquibase には liquibase があり、changlog.xml ファイルがあります
  2. Maven pom.xml に次のプロパティを配置します。

<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>

**** バージョン url で 3.2.0 を使用したものを、適切な IPADDRESS と PORT に置き換えます。

最後にあなたは走りますmvn liquibase:clearCheckSums

それが役に立てば幸い!

于 2016-04-04T07:54:05.963 に答える