8

我们进行由一组更改集组成的数据库发布,我们的数据库更改日志按以下方式组织

   MasterChangeLog.xml

           ---> Release0001.XML
                    ---> AddCustomerTable.XML
                    ---> AddOrderTable.XML

           ---> Release0002.XML
                    ---> AddNewColumnsToCustomerTable.XML
                    ---> AlterOrderTableXML

           ---> Release0003.XML
                    ---> AddPreferedCustomerTable.XML

我想知道如何回滚一组变更集。我希望我可以使用带有版本号(Release001、Release002 或 Release003)的 tagDatabase,然后使用标签回滚

如果我想将所有更改回滚到 Release001,我希望能够做这样的事情

java -jar "liquibase.jar" --changeLogFile="MasterChangeLog.xml" Rollback "Release0002"

你能告诉我如何让它与 Liquibase 一起工作吗?

谢谢

4

1 回答 1

9

如果 Release002 是有效标签,则您列出的命令有效。不过,您可能不希望/不需要在 Release0002 标记周围加上引号。

使用标签回滚时,liquibase 将从您执行的变更集的末尾开始,并以相反的顺序回滚每个变更集,直到它到达之前标记的变更集。我不确定你的描述是否是你想要的。

在您的示例中,如果您在 Realease002.xml 运行后标记数据库,则运行“rollback Release0002”将回滚 Release0003 中的所有内容。如果您想回滚 Release0002 中的所有内容,则需要在执行 Release0002 变更集之前运行“rollback Release0001”或制作 Release0002 标记。但是,无论哪种方式,您都会回滚 Release0003,因为它在 Release0002 之后。

liquibase 不支持选择回滚的变更集的原因是变更集之间经常存在依赖关系,因为它们经常相互构建,因此回滚中间的任意变更集组通常会产生意想不到的后果。

于 2010-11-05T17:01:01.683 回答