即使在变更集中未进行任何变更,Maven也会触发liquibase验证失败。
我的数据库是oracle。
情况:
- DB变更日志表中记录了变更集
<changeSet id="1" author="me" dbms="oracle">
;
1.然后我错误地添加了另一个变更集<changeSet id="1" author="me" dbms="hsqldb">
1.重新运行liquibase脚本Maven引发校验和验证错误。
1.然后我将hsqldb changeSet更改为<changeSet id="2" author="me" dbms="hsqldb">
- Maven仍触发校验和验证错误。
1.然后,我将DB中的第一个changeSet校验和手动更改为当前校验和,脚本成功运行。
一切看起来不错,但当我重新部署整个应用程序,并运行liquibase脚本校验和的第一个changeSet仍然像之前的6步。
9条答案
按热度按时间0g0grzrc1#
变更集ID不应重复。请给予新的变更集ID并尝试,它应该可以工作。
mklgxw1f2#
在我的例子中,changelog.yml文件有不正确的id。
数据库变更记录档:
7lrncoxx3#
如果您确信您的脚本正确地反映了数据库中 * 应该 * 的内容,请运行liquibase:clearCheckSums maven目标,它将清理所有内容。
fgw7neuy4#
在我的情况下,我忘记了 Liquibase 将所有更改日志写入数据库表。
转到 * ASECHANGELOG * 表,手动删除更改日志。
lrl1mhuk5#
这里的每个人都在谈论如何解决这个问题,但让我分享一个典型的场景,它可能会发生在你身上。
简短回答:由于这样或那样的原因,行分隔符的更改可能导致校验和验证错误,并且在代码更改中不可见。
为什么会发生在我身上?请阅读以下内容..
假设你有一个tomcat服务器,并且有多个人经常参与WAR部署。每个人都在LINUX上使用INTELLIJ IDEA,但是其中一个团队成员由于某种原因切换到了WINDOWS。现在,当WINDOWS PERSON创建WAR时,他可能没有注意到在INTELLIJ IDEA for WINDOWS中默认的行分隔符选择是CRLF,而所有以前的构建都是从LINUX机器上构建的,它使用LF行分隔符。
行分隔符的更改会影响所有文本文件,包括SQL文件。因此,您可能像我的团队一样在liquibase脚本中使用了以下内容
并且文件的校验和与数据库中已存储的校验和不匹配,从而引发校验和验证错误。
a8jjtwal6#
Liquibase读取
databasechangelog
表以验证最近的更改。因此,确定导致问题的databasechangelog
id并删除,如下所示:Deleting a bad changelog in Liquibase
eit6fx6z7#
As I struggle with this one I want to make it easier for people with this same issue:
**** version the one I used 3.2.0 in url replace with proper IPADDRESS and PORT.
Finally you run
mvn liquibase:clearCheckSums
Hope it helps!
hgb9j2n68#
The liquibase documentation has a 2nd option now
Assuming you rarely have to change historic changelog XML files, then you rarely have error messages. If you get an error message then add a tag with the old checksum acknowledging it's fine.
Example:
rsaldnfx9#
在maven插件中配置liquibase的数据库链接信息。
就像这样: