一文详解Liquibase如何自动化数据库脚本部署( 四 )


Liquibase—defaultsFile=liquibase_dev.properties ChangelogSyncSQL 输出的SQL文件为:

一文详解Liquibase如何自动化数据库脚本部署

文章插图
 
可见,SQL文件只插入了一个DATABASECHANGELOG表 。它会告知Liquibase这些对象已经创建好了,不需要再次运行 。现在,我们便可以将其插入到Oracle数据库中了:
Liquibase—defaultsFile=liquibase_dev.properties ChangelogSync 此时,在DATABASECHANGELOG表中会有4个新的变更集:
一文详解Liquibase如何自动化数据库脚本部署

文章插图
 
您也许会问,这些奇怪的“raw”ID 是什么?为什么作者又被称为“includeAll”呢?这是因为我们采取了最简单、最快捷的方式,将现有的项目迁移到了Liquibase处,而这些变更集是被自动创建的 。
当然,您也可以进行一些更改 。例如,在P_ADD_JOB_HISTORY中,只需添加一个changeset,就像您在创建新数据库对象时常做的那样 。
一文详解Liquibase如何自动化数据库脚本部署

文章插图
 
更改P_ADD_JOB_HISTORY
然后运行Liquibase的更新命令:
一文详解Liquibase如何自动化数据库脚本部署

文章插图
 
现在,Changeset就带有了合适的作者、ID等信息 。
在上面的示例中,我向您展示了添加现有对象(可创建或替换)的简单方法,且无需手动创建变更集 。我认为这是将Liquibase安装到拥有数百个对象的、现有数据库中的最佳方式 。不过,当涉及到库里有不能被替换的对象(如表格)时,我们需要使用另一种方式 。
当现有项目中没有很多对象时创建或替换的对象正如前面所描述过的,请添加对象,并在master.xml文件中记下文件夹的路径 。接着请运行ChangelogSync,并让Liquibase自动创建raw/includeAll/filename的变更集 。
一文详解Liquibase如何自动化数据库脚本部署

文章插图
 
由Liquibase生成的变更集
当然,您也可以采用更好的方法,为每个文件创建一个变更集,如下图所示:
一文详解Liquibase如何自动化数据库脚本部署

文章插图
 
虽然这会需要更多的工作,但是您可以在日志中获得更全面的信息:
一文详解Liquibase如何自动化数据库脚本部署

文章插图
 
针对无法创建或替换的对象,您同样有两种方法:
  • 对这些对象不做任何操作,但请记住始终为其中的每个更改(包括:更改表、删除列等)创建变更集,并将其添加到changelog.sql文件中 。
  • 创建变更集并将它们标记为过去已被执行过 。
在此,我们着重讨论第二种方式 。由于在实施Liquibase之前我已创建好了EMPLOYEES和JOBS两张表,因此我会在新的文件夹HR/scripts_before_Liquibase中,创建changelog_ddl.sql和changelog_constraints.sql两个changelog文件 。此外,我也创建了另一个scripts_before_liquibase.xml文件,并将其指向这两个changelog 。其中的“include file”通过优先级的方式,告知Liquibase运行脚本的顺序,即:首先创建表,然后创建约束和索引 。
一文详解Liquibase如何自动化数据库脚本部署

文章插图
 
新的scripts_before_liquibase.xml文件
这两个文件能够方便您在表中创建ref_constraint时,避免产生冲突 。如下图所示,请记住在master.xml文件中,将路径添加到新创建的XML文件(即
HR/script_before_liquibase/scripts_before_liquibase.xml)中 。
一文详解Liquibase如何自动化数据库脚本部署

文章插图
 
下面是为各种表和约束创建的变更集 。
一文详解Liquibase如何自动化数据库脚本部署

文章插图
 
在添加了所有的变更集之后,我们将它们标记为已执行的状态 。
让我们运行ChangelogSyncSQL来进行预览,并让ChangelogSync对数据库执行SQL 。
一文详解Liquibase如何自动化数据库脚本部署

文章插图
 
运行ChangeSyncSQL和ChangelogSync
下图展示了ChangelogSync命令执行后,更新了的数据库 。至此,我们已大功告成,您也可以选用自己喜欢的方式,通过Liquibase来实现数据库的自动化 。
一文详解Liquibase如何自动化数据库脚本部署

文章插图
 
小结如您所见,通过使用Liquibase,我们可以在数据库更改的发布过程中,跟踪所有的相关内容 。其中,需要开发人员遵守如下流程:


推荐阅读