Liquibase 校验和验证错误,没有任何更改

问题描述 投票:0回答:10
maven liquibase changeset
10个回答
94
投票

如果您确信您的脚本正确反映了数据库中“应该”的内容,请运行 liquibase:clearCheckSums maven 目标,这将清除所有内容。


20
投票

简短回答:由于某种原因更改行分隔符可能会导致校验和验证错误,并且在代码中不可见 变化。

为什么它会发生在我身上?请阅读下文..

假设你有一台tomcat服务器,时不时会有多人参与WAR部署。每个人都在 LINUX 上使用 INTELLIJ IDEA,但其中一位团队成员由于某种原因切换到 WINDOWS。 现在,当 WINDOWS 人员创建 WAR 时,他可能没有注意到 INTELLIJ IDEA for WINDOWS 中的默认行分隔符选择是 CRLF,但所有以前的版本都是从使用 LF 行分隔符的 LINUX 机器构建的。

行分隔符的更改会影响所有文本文件,其中也包括 SQL 文件。所以你可能在你的 liquibase 脚本中像我的团队一样使用了以下内容

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

并且文件的校验和与数据库中已存储的校验和不匹配,从而引发校验和验证错误。


19
投票
Liquibase

将所有变更日志写入数据库表。 转到

DATABASECHANGELOG

表并手动删除更改日志。


15
投票
databasechangelog

表来验证最近的更改。 因此,找出导致问题的

databasechangelog
id 并将其删除,如下所示:
select * from myschema.DATABASECHANGELOG;

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

删除 Liquibase 中的错误变更日志


6
投票

重要!,liquibase 有一个 liquibase 有一个 changlog.xml 文件
  1. 在 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>

**** 我用的版本是3.2.0 在 url 中替换为正确的 IPADDRESS 和 PORT。

你终于跑了

mvn liquibase:clearCheckSums


希望有帮助!


5
投票
liquibase 文档

现在有第二个选项 The <validCheckSum> attribute The second option is to add a <validCheckSum> element to the changeset. The text contents of the element should contain the old checksum from the error message.

假设您很少需要更改历史变更日志 XML 文件,那么您很少会收到错误消息。如果您收到错误消息,请添加一个带有旧校验和的标签,确认没有问题。

示例:

<changeSet id="example" author="former-author" runOnChange="false"> <validCheckSum>8:869....4e3</validCheckSum> <addColumn tableName="ye_olde_db_table"> <!-- fix some old typo or incompatibility, etc --> </addColumn> </changeSet>



0
投票

像这样:

<plugin> <groupId>org.liquibase</groupId> <artifactId>liquibase-maven-plugin</artifactId> <version>${liquibase.version}</version> <configuration> <changeLogFile>${project.basedir}/src/main/resources/config/liquibase/master.xml</changeLogFile> <driver>com.mysql.cj.jdbc.Driver</driver> <url>jdbc:mysql://localhost:3306/hos_gateway</url> <username>root</username> <password>root</password> <referenceUrl>hibernate:spring:com.hos.physician.domain?dialect=org.hibernate.dialect.MySQL5InnoDBDialect&amp;hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&amp;hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy</referenceUrl> <verbose>true</verbose> <logging>debug</logging> <contexts>!test</contexts> </configuration> </plugin>



0
投票

<changeSet id=



0
投票

数据库更改日志:

更改集: ID:1.0.xx

0
投票

Liquibase 网站上的这篇文章描述了问题和可能的解决方案,我强烈推荐它:

https://docs.liquibase.com/concepts/changelogs/changeset-checksums.html

干杯, 德米特里。

© www.soinside.com 2019 - 2024. All rights reserved.