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


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

文章插图
 
作者丨Rafal Grzegorczyk
译者丨陈骏
策划丨孙淑娟
【51CTO.com原创稿件】您是否还在手动对数据库执行各种脚本?您是否还在浪费时间去验证数据库脚本的正确性?您是否还需要将脚本合并到某个文件中,以便在每个环境中执行?在面对部署错误时,您是否需要花费数小时去查看数据库的更改,以定位原因?
如今,大多数组织都已经在其应用程序中实施了DevOps的CI/CD流程 。不过,其数据库的自动化改造似乎尚未跟上时代 。为此,我将向您介绍一种能够实现自动化脚本部署的数据库产品--Liquibase 。
Liquibase的基本特点
  • 自动化数据库的部署脚本 。
  • 以相同的方式部署到不同的环境中 。
  • 能够为每次数据库的更改准备好回滚 。
  • 能够将部署的所有详细信息集中到一处 。
  • 最少化的部署错误 。
  • 方便开发人员针对相同的数据库,进行高效的协同编程 。
  • 审核逐个更改(请参考下图) 。

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

文章插图
 
下面,我将向您展示如何使用Liquibase和Git在Pretius上,自动化数据库的更改过程 。
什么是Liquibase?Liquibase(简称LB)是一个用JAVA编写的开源工具 。它以用户熟悉的格式定义了数据库接口,并能够自动生成特定于数据库的SQL 。例如,它将数据库的更改(每一次更改可称为一个更改集)放入被称为changelog的文件中进行管理 。通常,Liquibase在数据库架构中会自动创建两张表:
  • DATABASECHANGELOG — 存储有关数据库所有更改信息的表 。
  • DATABASECHANGELOGLOCK — 用于防止用户同时对数据库进行更改 。
我将在下面示例中,基于SQL编写变更集,以实现对Oracle数据库的自动化更改过程 。
从安装Liquibase开始请通过链接
https://www.liquibase.org/download,选择“仅文件(Just the files)”的方式,下载Liquibase的最新版本 。在本文中,我将使用版本:4.3.0 build 09.02.2021 。
在将其zip文件夹解压缩后,您必须将新的路径变量(New Path System Variable)设置为计算机上的liquibase-version#bin文件夹 。同时,为了使Liquibase正常工作,您还必须安装Java 。
通过在CLI工具(在此,我使用的是Visual Studio Code)输入:Liquibase—version,您将能看到:
一文详解Liquibase如何自动化数据库脚本部署

文章插图
 
如果您在文件中使用的是UTF8编码,那么请务必在liquibase.bat文件中添加一行:IF NOT DEFINED JAVA_OPTS set JAVA_OPTS=-Dfile.encoding=UTF–8 。
一文详解Liquibase如何自动化数据库脚本部署

文章插图
 
配置项目和Liquibase下面,让我们来组织各个文件(在本例中,我的GIT存储库放在文件夹HR中) 。在各个文件夹中,我们可以在项目开发的过程中创建不同的文件 。如果您有其他类型的对象(如“创建或替换”类型),那么只需要用它们创建“同义(synonyms)”文件夹即可 。
一文详解Liquibase如何自动化数据库脚本部署

文章插图
 
Liquibase中的文件组织
#path to our master changelog file changeLogFile:Liquibase/update.xml #dbhost and credentials url:jdbc:oracle:thin:@127.0.0.1:1521/XEPDB1 username: HR password: XXXXXX #OJDBC driver localization classpath:Liquibase/ojdbc8.jar #schema, whereLiquibasewill store it’s DATABASECHANGELOG and DATABASECHANGELOGLOCK table(if other than HR, remember to add grants to HR!) liquibaseSchemaName: HR #defaultSQL file name generated byLiquibase outputFile=output_local.sql #debug mode loglevel=SEVERE #extra option fromLiquibase, we don’t need it for now. liquibase.hub.mode=off
一文详解Liquibase如何自动化数据库脚本部署

文章插图
 
更新了的Liquibase文件夹结构
现在,我们创建一个update.xml文件,并将它放入带有OJDBC文件的、新的 hr/Liquibase文件夹中:
<?xml version="1.0″ encoding="UTF-8″?><databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.3.xsd"></databaseChangeLog> 使用 Oracle Wallet(可选)如果您的Oracle数据库托管在Oracle自治数据库上,那么就需要使用Wallet,通过Liquibase去连接它 。为此,请下载Wallet并记住其密码 。


推荐阅读