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

Mic*_*ael 7 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会调用只有新变更集的回滚元素吗?

Ste*_*nie 9

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

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

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

  3. 回滚使用相同的机制来了解要回滚的更改集.当你回滚你必须以某种方式有什么变化撤消指定-看到这个页面了解更多信息:http://www.liquibase.org/documentation/rollback.html

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