Подтвердить что ты не робот

Ошибка проверки контрольной суммы Liquibase без каких-либо изменений

Maven запускает проверку липибазы, даже никаких изменений в наборе изменений не было.

Моя база данных - оракул.

Ситуация:

  • В таблице изменений в DB была запись для набора изменений <changeSet id="1" author="me" dbms="oracle">;

  • Затем по ошибке я добавил еще один набор изменений <changeSet id="1" author="me" dbms="hsqldb">

  • Повторные сценарии ликбазы. Ошибка проверки контрольной суммы Maven.

  • Затем я изменил hsqldb changeSet на <changeSet id="2" author="me" dbms="hsqldb">

  • Maven все еще исправляет ошибку проверки контрольной суммы.

  • Затем я изменил первую контрольную сумму changeSet в БД вручную на текущий checkSum и успешно запустил сценарии.

Все выглядит красиво, но когда я перераспределяю все приложение и запускаю скрипты linibase, контрольная сумма первого changeSet по-прежнему нравится до 6 шагов.

4b9b3361

Ответ 1

Если вы уверены, что ваши сценарии правильно отражают то, что должно быть в базе данных, запустите Liquibase: clearCheckSums maven goal, который очистит все.

Ответ 2

Ликвибаза выдает ошибки проверки контрольной суммы, чтобы указать, что изменения, примененные к базе данных, больше не соответствуют содержимому, указанному в файлах ревизий Ликвибасы....

Это мера безопасности, предназначенная для обнаружения файлов спецификаций с неправильным поведением, которая может легко возникнуть во время разработки. Лучший способ решить эту проблему - отбросить все объекты и запустить жидкость в новой среде разработки следующим образом:

mvn liquibase:dropAll liquibase:update

Предупреждение - это удалит все объекты в схеме. Вы потеряете все данные в таблицах и любой объект, не управляемый Liquibase. Документация для достижения цели

Иногда вы действительно хотите поддержать изменение наборов изменений. В этих обстоятельствах liquibase поддерживает атрибут runOnChange, который выборочно применяет наборы изменений к экземпляру базы данных.

Ответ 3

В моем случае я забыл, что Liquibase записывает все chagelogs в таблицу базы данных.

Перейдите в таблицу DATABASECHANGELOG и удалите вручную свои чагетоны.

Ответ 4

Поскольку я борюсь с этим, я хочу облегчить людям эту проблему:

  • Важно!, Liquibase имеет Liquibase имеет файл changlog.xml
  • На 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>

Ответ 5

Все здесь говорят о том, как это исправить, но позвольте мне рассказать о типичном сценарии, где это может произойти для вас.

КРАТКИЙ ОТВЕТ: Изменение разделителя строк по той или иной причине может вызвать ошибку проверки контрольной суммы и не будет отображаться при изменениях кода.

Почему это произошло для меня? Пожалуйста, прочитайте ниже..

Предположим, у вас есть сервер Tomcat, и время от времени в развертывании WAR участвуют несколько человек. Все используют INTELLIJ IDEA в Linux, но один из членов команды почему-то переключается на WINDOWS. Теперь, когда ЧЕЛОВЕК WINDOWS создаст WAR, он может не заметить, что выбор разделителя строк по умолчанию в INTELLIJ IDEA для WINDOWS - это CRLF, но все предыдущие сборки, построенные на машине LINUX, которая использует LF-разделитель строк.

Изменение в разделителе строк влияет на все текстовые файлы, включая файлы SQL. Таким образом, вы, возможно, использовали следование, как моя команда, в вашем скрипте liquibase

changeSet(author: "aditya", id: "1335831637231-1") {
    sqlFile( path: "liquibase/quartz_oracle_tables.sql", "stripComments": true)
}

и контрольная сумма файла не будет совпадать с уже сохраненной в базе данных ошибкой проверки контрольной суммы.

Ответ 6

Liquibase читает таблицу databasechangelog, чтобы проверить последние изменения. Итак, определите идентификатор databasechnagelog, который вызывает проблему, и удалите, как показано ниже:

select * from myschema.DATABASECHANGELOG;

Delete from myschema.DATABASECHANGELOG where ID='prob_id';

Удаление неправильного журнала изменений в Liquibase