【问题标题】:Liquibase rollback, changesets not being rolled backLiquibase 回滚,变更集未回滚
【发布时间】:2015-09-30 15:49:08
【问题描述】:

我的问题是 liquibase 没有回滚我的一些变更集,这些变更集是在我尝试回滚的变更集上设置标签后执行的。

例如,我创建了两个正常执行的变更集(A 和 B)。然后我创建了另一个变更集,它将变更集 B 的标签设置为 release1。这个变更集也可以按预期工作。但是,我随后使用回滚命令执行另外 5 个变更集。而且这些也执行得很好。

现在问题来了,当我运行以下命令时:

java -jar liquibase.jar --changeLogFile=..\database\changelog-create.xml rollback release1

现在不应该回滚在 release1 标签执行后执行的任何变更集吗?

如果是这样,这是我的问题,它们不会被回滚。但在控制台中我得到回滚成功。

【问题讨论】:

  • 我理解回滚到标签(see here)的描述也是一样的。因此,也许还有其他问题。您可以尝试将日志级别更改为调试(将--logLevel=debug 添加到您的命令行),看看是否提供了更多详细信息...
  • 感谢@Jens 的回复我已尝试在此调试行中添加,但这没有提供其他信息。我认为这仅在出现异常时才有效。我不太确定说实话,但这对我没有任何帮助
  • 您应该明确地看到 liquibase 提供的日志消息数量的差异。否则调试日志级别的开关不起作用!
  • @Jens 好的,我让它显示所有调试消息。一切看起来都很好,除了似乎没有执行任何 sql 回滚。我不确定他们是否应该出现在调试中,但他们没有这样做。您是否可以提供正确的方法来设置标签?我目前的做法如下 'UPDATE DATABASECHANGELOG SET TAG = 'release1' WHERE DATEEXECUTED = (SELECT MAX(DATEEXECUTED) FROM (SELECT DATEEXECUTED FROM DATABASECHANGELOG) AS X) AND ORDEREXECUTED = (SELECT MAX(ORDEREXECUTED) FROM (SELECT ORDEREXECUTED from DATABASECHANGELOG) AS Y);'
  • 我注意到的其他事情是......唯一被回滚的是设置标签的变更集。我希望这会在第三次执行时回滚,而带有标签的变更日志是第二次执行的。但是我再一次看不出为什么其他变更集没有被回滚。然而,其他变更集随后在不同的命令中执行。

标签: sql command-line liquibase rollback changeset


【解决方案1】:

所以我发现了问题..我的命令行中的以下行 --changeLogFile=..\database\changelog-create.xml 错了。 changeLogFile 应该是您要从其开始回滚的文件。而我提供了带有标签的变更日志文件。

【讨论】:

    猜你喜欢
    • 2011-05-04
    • 1970-01-01
    • 2016-05-29
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    相关资源
    最近更新 更多