Liquibase脚本失败
问题描述:
我有一个glassfish应用程序,它使用liquibase创建它的数据库模式。我已将相同的应用程序迁移到Spring Boot。我没有删除数据库模式。当我部署Spring应用程序和脚本liquibase跑,我执行变更用于创建一个表时,你得到Liquibase脚本失败
java.sql.SQLSyntaxErrorException: ORA-00955: name is already used by an existing object
。
我需要指定liquibase脚本中没有更改,并且成功获取数据库更新日志锁定。
不应该跳过所有的表格创建步骤吗?我将相同的应用程序插入相同的数据库。你以前遇到过这种情况吗?
更新:这可能与更改日志文件中存储的MD5总数有关吗?所以新应用程序计算出的md5与旧版本计算出的不匹配,脚本被触发,导致明显的异常?
非常感谢
答
我不认为你有一个校验和差异 - 这将导致不同的错误信息。我认为可能是DATABASECHANGELOG表的变更记录路径不同于Liquibase报告的变更记录路径。
变更集由3件事物识别 - 变更集ID,作者和路径。当Liquibase决定是否应将更改日志中的更改集部署到特定数据库时,它会查看DATABASECHANGELOG表并检索该信息,将其与更改日志文件中的信息进行比较,并且不会尝试部署任何与之匹配的内容。在这种情况下,我认为它会检测路径上的差异并尝试重新部署更改。
谢谢@SteveDonie,那是我的问题。升级liquibase版本导致更新日志路径以稍微不同的方式构建。所以变更集将被应用。解决方案是在.xml文件中指定logFileName属性。 – TheRock3t
很高兴能帮到你。如果您觉得这是一个正确的答案,请在这里“接受答案”。 – SteveDonie