Database Liquibase回滚无法智能地确定要执行的语句顺序。对吗?

Database Liquibase回滚无法智能地确定要执行的语句顺序。对吗?,database,oracle,rollback,liquibase,Database,Oracle,Rollback,Liquibase,我有一个过程,在这个过程中,对db所做的每个更改都会在其自己的sql文件中更新,并且sql文件会在其自己的changeset.xml中引用。例如,table1.sql有一个table1.xml,它使用标记来引用该sql。sql对数据库中的table1对象进行了一些更改 假设有一组对象正在更新,触发器引用table1,包规范和主体引用table1,约束引用table1。这些对象的sql语句位于各自的sql文件中,如trigger1.xml中引用的trigger1.sql、constraint1.x

我有一个过程,在这个过程中,对db所做的每个更改都会在其自己的sql文件中更新,并且sql文件会在其自己的changeset.xml中引用。例如,table1.sql有一个table1.xml,它使用
标记来引用该sql。sql对数据库中的table1对象进行了一些更改

假设有一组对象正在更新,触发器引用table1,包规范和主体引用table1,约束引用table1。这些对象的sql语句位于各自的sql文件中,如trigger1.xml中引用的trigger1.sql、constraint1.xml中引用的constraint1.sql等

现在,各个XML的rollback语句只关注该对象。例如,trigger1.xml有rollback标记只用于删除trigger1,类似地,constraint1.xml有rollback标记只用于删除constraint1

所有changelog xml在主xml中排序,主xml确定更新顺序,如包括第一个table1.xml、Constraint1.xml、trigger1.xml等

我的问题是,我要么坚持使用这种方法,要么坚持使用liquibase本身,因为rollbackSQL命令并没有按照正确的顺序生成sql,比如先删除触发器,再删除约束,最后再删除table1。假设一个更大的场景,复杂的更改依赖于其他对象,这些对象无法回滚,因为顺序不够智能


如何处理这种情况?是否建议使用其他方法?

您是正确的-Liquibase不会尝试重新订购变更集。它们按更改日志中列出的顺序运行

如果你想要更多的答案,你应该理顺你的问题,让它更容易阅读。我认为liquibase将以相反的顺序执行rollback语句。你是说这不会发生吗?或者你希望liquibase想出一个聪明的方法(而不仅仅是相反的方法)?@Jens。我想我的问题已经很直截了当了。。我再次提出的问题是,是否liquibase的设计只是为了反转回滚脚本中的更改顺序,还是它还具有确定回滚执行顺序的功能?您的评论要短得多,更容易理解。:-)没有关系。我认为当
rollback
完成时,以相反的顺序执行所有变更集,liquibase没有任何“智能”功能。虽然我不得不说,我没有监督整个liquibase代码和功能,所以我可能是错的。但是:
rollback
可以通过
rollbackSQL
输出到文件(而不是直接执行到数据库)。然后你自己再点。我在google和stackoverflow中做了大量搜索,看看是否有任何DB变更管理解决方案支持DevOps模型。我正在尝试使用Liquibase来整合来自多个团队的DB更改,并将它们直接应用于目标数据库,而无需任何手动干预。尽管它允许我捕获故障并将其作为反馈报告给团队,但Liquibase中的回滚功能还不足以自动将数据库更改应用到目标数据库并回滚它们。这让我在使用Liquibase时找到了解决办法。有什么建议吗?我自己根本没有尝试过,但它基于liquibase,并添加了更多功能。Nathan Voxland(liquibase的创始人)似乎也在那里工作。这是商业性的,他们在页面上没有任何信息(至少我在快速搜索时找不到信息)。但也许值得考虑一下。