更好地理解Liquibase如何执行更改集

时间:2014-02-23 14:26:07

标签: liquibase

我想更好地了解Liquibase如何执行更改集。

1)

a)例如,我有一个包含4个更改集的更改日志,我执行updateDatabase(http://www.liquibase.org/documentation/ant/updatedatabase_ant_task.html)。 Liquibase将执行4个更改集。

b)如果我再次运行相同的更改日志,则Liquibase不执行任何设置。

c)如果我将新的更改集添加到更改日志并运行更改日志,Liquibase将仅执行新的更改集。

问题:

  • Liquibase如何知道要执行的更改集?

  • Liquibase如何知道已经执行了哪些更改集?

2)变更集ID如何重要?我可以在更改日志执行后更改它吗?

3)变更集作者的重要性如何?我可以在更改日志执行后更改它吗?

4)如果我将执行rollbackDatabase(http://www.liquibase.org/documentation/ant/rollbackdatabase_ant_task.html)会怎样? Liquibase如何知道哪些更改设置为回滚?

a)如果我将在1 a)之后执行回滚会发生什么。 Liquibase会调用位于每个更改集中的回滚元素(4个回滚元素)吗?

b)如果我将在1 b)之后执行回滚会发生什么。 Liquibase如何知道不会调用任何回滚元素?

c)如果我将在1 c)之后执行回滚会发生什么。 Liquibase会调用只有新变更集的回滚元素吗?

1 个答案:

答案 0 :(得分:8)

我可以回答几个问题,也许不是全部问题。

  1. ℃。 - 当您进行第一次更新时,Liquibase会在数据库中创建2个新表。主表是DATABASECHANGELOG,用于跟踪已应用于数据库的更改集。 Liquibase使用几种方法来识别每个变更集 - id,author和path用作复合键。 Liquibase还生成每个变更集的校验和,用于判断变更集在应用于数据库后是否已更改。

  2. 和3.由于更改集ID和作者用作主键的一部分,因此如果部署,则更改其中任何一个,您可能会在后续部署中遇到意外行为。我认为id和author也是校验和计算的一部分,因此也可能影响事物。我建议您在部署后不要更改它们。

  3. 回滚使用相同的机制来了解要回滚的更改集。当您回滚时,您必须以某种方式指定要撤消的更改 - 请参阅此页面以获取更多信息:http://www.liquibase.org/documentation/rollback.html

  4. 回滚标识机制是按标记(这意味着您必须在部署时应用标记),按日期(Liquibase跟踪部署每个变更集的时间)或按编号(隐式使用日期/时间)每个变更集都已部署完毕。)