Liquibase 脚本失败

Posted

技术标签:

【中文标题】Liquibase 脚本失败【英文标题】:Liquibase script fails 【发布时间】:2016-12-29 04:18:32 【问题描述】:

我有一个 glassfish 应用程序,它使用 liquibase 创建其数据库架构。我已将相同的应用程序迁移到 Spring Boot。我没有删除数据库架构。当我部署 Spring 应用程序并运行 liquibase 脚本时,我得到了

java.sql.SQLSyntaxErrorException: ORA-00955: name is already used by an existing object

在执行更改集以创建其中一个表时。

我需要指定 liquibase 脚本没有变化,并且成功获取数据库更改日志锁。

不应该跳过所有的表创建步骤吗?我将同一个应用程序插入同一个数据库。你以前遇到过这种情况吗?

更新:这可能与存储在更改日志文件中的 MD5 和有关吗?所以新应用计算的md5与旧应用计算的md5不匹配,脚本被触发,导致明显的异常?

非常感谢

【问题讨论】:

【参考方案1】:

我认为您没有校验和差异 - 这会导致不同的错误消息。我认为很可能是 DATABASECHANGELOG 表的更改日志路径与 Liquibase 报告的更改日志路径不同。

变更集由 3 个东西标识 - 变更集 ID、作者和路径。当 Liquibase 决定是否应该将变更日志中的变更集部署到特定数据库时,它会查看 DATABASECHANGELOG 表并检索该信息,将其与变更日志文件中的信息进行比较,并且不会尝试部署任何匹配的内容.在这种情况下,我认为它会检测到路径中的差异并尝试重新部署更改。

【讨论】:

谢谢@SteveDonie,这是我的问题。升级 liquibase 版本导致更改日志路径以稍微不同的方式构建。因此将应用更改集。解决方案是在 .xml 文件中指定 logFileName 属性。 很高兴我能帮上忙。如果您认为这是一个正确的答案,请在此处“接受答案”。

以上是关于Liquibase 脚本失败的主要内容,如果未能解决你的问题,请参考以下文章

Liquibase - 执行前测试变更集

Liquibase 更新失败

Liquibase 校验和验证失败

liquibase 迁移失败,而 dropColumn 布尔变量

当我使用 liquibase 更改模型数据时,JHipster 集成测试失败

使用 liquibase 构建测试脚本以使用普通脚本按顺序执行