Liquibase - 回滚一组变更集

时间:2010-11-03 09:22:08

标签: liquibase

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

   MasterChangeLog.xml

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

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

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

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

如果我想将所有更改回滚到Release001

,我希望能够做到这样的事情
java -jar "liquibase.jar" --changeLogFile="MasterChangeLog.xml" Rollback "Release0002"

你能否告诉我如何让它与Liquibase合作?

由于

1 个答案:

答案 0 :(得分:9)

如果Release002是有效标记,则列出的命令有效。但是,您可能不希望/需要引用Release0002标记。

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

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

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