我在Liquibase中运行updateSQL命令行时发现了2个问题
Liquibase updateSQL输出中的最后一个语句viz当通过sqlplus命令行运行sql时,插入到DBCHANGELOG表中不会自动提交
因此,虽然更改集已执行,但DBCHANGELOG表没有insert语句来记录它。因此,当我再次运行updateSQL时,再次在SQL输出中创建了最后一个更改集,这是不正确的。
Liquibase不验证/检查SQL中的语法错误。
因此,即使更改集SQL失败,对变更集的DBChangeLog表的插入也会成功,这是不正确的。如果变更集SQL实际上失败了,是否有一种方法可以使变更集后面的insert语句停止/失败?
非常感谢任何帮助......我们接近实施Liquibase ...... !!
答案 0 :(得分:3)
要回答主题中的问题,不,Liquibase无法验证SQL。 Liquibase支持许多不同的数据库,每个数据库都有不同的SQL语法。
如果可以,请停止使用updateSQL生成的SQL实际执行更新,并使用Liquibase本身进行更新。这样,Liquibase可以检测错误并且表现得更好。我建议如果DBA害怕Liquibase触及数据库,团队使用generateSQL作为预检查,看看Liquibase会做什么,但让Liquibase完成它的工作。
答案 1 :(得分:1)
我还发现Liquibase的最佳实践不是使用SQL脚本,而是手动编写Liquibase XML文件以进行更改。
我已经尝试过使用ExecuteCommand标签来共享sqlplus或sqlcmd(因为我知道我的目标数据库)并且它有一个错误,它现在已经关闭了?! (但这是开源的,所以我不能抱怨:))
话虽如此,我发现使用XML来指定更改会带来许多其他挑战,例如: 1.确保每个更改都包含在changelog xml文件中。我听说很多组织忘记将文件添加到更改日志中。 2.确保特定更改的文件始终与基于文件的版本控制同步。想象一下如果不这样会发生什么 - 这对我的许多客户来说都是...... 3.浪费时间在不同环境(分支机构,UAT - 关键修复程序,沙箱等等)之间合并更改日志。