kapcus/dbchanger

数据库变更安装工具包

v0.5.9 2018-10-30 15:11 UTC

README

高级数据库变更管理工具包。

  • 集中部署和安装
  • 多环境、多模式和用户
  • 每个dbChange可以有多个SQL文件和任意占位符
  • 简单的环境配置
  • 每个dbChange可以定义多个其他所需的dbChange

当前支持的数据库

  • ORACLE

架构

  • 环境可以分配给多个用户,并可以定义多个占位符
  • DbChange由片段组成。
  • 片段是一组在一个SQL文件中定义的SQL查询 - SQL内容更像模板
  • 每个DbChange都可以在环境中安装,这表示为安装。
  • 安装可以是成功的,取消的,但总是同时只有一个活动安装。每个安装由安装片段组成。安装片段是针对特定环境和用户修改的特定片段的SQL内容。其标识符以字母F开头,例如F10

DbChange 12345 有自己的目录。它由10个片段组成。因此有10个文件

每个文件名遵循格式XXXXXX_YYYYYYY_ZZZZZZZ.sql,其中

  • XXXXXX是可选的,可以作为文件前缀,在我们的例子中是空的(例如dbchange_)
  • YYYYYY是片段索引编号,必须是数字且递增,用字母I标识(例如I5)
  • ZZZZZZ是组名

文件_requirements.txt可以包含必需安装在此dbChange之前安装的dbChange列表。每行一个dbChange代码。空或缺失的文件表示dbChange不需要安装任何dbChange。

每个片段内容在事务角度上必须是原子的。例如,Oracle不支持回滚DDL语句,因此所有这些查询必须在自己的单独文件中。

可以在每个环境的config.local.neon文件中定义组,例如。

  • central: [MAINUSER] - 表示具有组central的片段SQL内容将为主用户执行
  • region: [SLAVEUSER1, SLAVEUSER2] 表示具有组region的片段SQL内容将为SLAVEUSER1执行,也将为用户SLAVEUSER2执行

用户可以定义任意数量的组,并将任意数量的用户分配到每个组中。

在片段SQL内容中可以使用占位符。处理引擎简单地将占位符替换为配置文件中定义的值,该文件是要替换的。

组名也可以用作占位符。结果是,将为分配给组中的每个用户插入一行SQL代码,占位符值将替换为用户名。

使用以下表示法

  • I1 = 安装 ID为1
  • F2 = 安装片段 ID为2
  • X3 = 片段索引 ID为3
  • L4 = 安装日志 ID为4

可用的安装状态

  • N = - 初始状态,表示安装可以开始
  • P = 挂起 - 状态表示至少存在一个挂起的安装片段
  • I = 已安装 - 所有安装片段都成功安装
  • C = 已取消 - 所有安装片段都被取消

可用的安装片段状态

  • N = - 初始状态,表示安装片段已准备好安装
  • P = 挂起 - 状态表示该安装片段的安装已经开始,但发生了一些错误
  • I = 已安装 - 安装片段已成功安装
  • S = 跳过 - 安装片段已被跳过
  • C = 已取消 - 安装片段已被取消

安装

1] 使用以下命令安装DbChanger及其所有必需依赖项

composer require kapcus/dbchanger

2] 运行位于 build 文件夹中的sql脚本。这将安装DbChanger内部数据库表。(您需要能够创建表、触发器、序列,请参阅 grants.sql

3] 将 config.local.neon.example 移动到 dbchanger/config.local.neon 并设置dbchanger.database部分(这里将运行中央DbChanger逻辑的数据库)。

4] 运行此命令以验证DbChanger是否已正确安装和配置

php bin/console.php dbchanger:check

使用方法

1] 在 dbchanger/config.local.neon 中定义您的环境。

========================================

2] 使用以下命令初始化DbChange

php bin/console.php dbchanger:init

此命令将配置文件中指定的环境数据加载到内部DbChanger数据库中。现在,DbChanger与您的配置保持一致,并准备提供服务。

========================================

3] 使用以下命令注册dbChange(例如,12345)

php bin/console.php dbchanger:register 12345

php bin/console.php dbchanger:register 12345 -d

php bin/console.php dbchanger:register 12345 -o

此命令将dbChange文件的sql内容加载到内部DbChanger数据库中。现在,dbChange已准备好在所选环境中安装。

如果指定了 -d(调试),则忽略文件 _requirements.txt 中指定的所有依赖DbChange。这在开发期间非常有用,当开发者需要测试特定DbChange及其依赖项不重要时。

如果指定了 -o(覆盖),则现有DbChange(如果有的话)将被覆盖 - 这仅在没有任何挂起的该DbChange安装时才可能。

config.neon 中指定的 inputDirectory 中搜索源dbChange内容

========================================

4] 使用以下命令安装dbChange(例如,12345)

php bin/console.php dbchanger:install DEV 12345

php bin/console.php dbchanger:install DEV 12345 -s

php bin/console.php dbchanger:install DEV 12345 -f

此命令将与指定用户的环境建立连接。一旦连接,它将逐个执行所选dbChange的sql查询。安装逐个处理片段,并通过适当的安装片段状态确认此操作。一旦整个dbChange安装成功安装,将设置正确的安装状态。

如果指定了 -s(停止),则安装将在开始时停止(在需要跳过第一个片段时很有用)

如果指定了 -f(强制),则将忽略确保所有必需DbChange都最新的约束(即安装了最新版本)

所有执行的查询都记录在 config.neon 中指定的 logDirectory

========================================

其他功能

DbChanger可以显示安装状态,并列出所有安装片段及其特定属性(例如,显示在DEV环境中dbChange 12345的安装状态)

php bin/console.php dbchanger:status DEV 12345

同时列出特定DbChange的所有注册版本。

========================================

如果安装失败或需要手动安装组,则需要手动交互。在安装过程中,DbChanger将识别此状态并报告。一旦手动执行或修复,必须通知DbChanger问题已解决。以下命令可以更改dbChange片段的状态(例如,将片段F3的状态更改为INSTALLED,将片段F3、F4和F5的状态更改为CANCELLED,整个安装的状态更改为NEW)。

php bin/console.php dbchanger:mark F3 I
php bin/console.php dbchanger:mark F3-F5 C
php bin/console.php dbchanger:mark I1 N

========================================

命令log可用于显示指定已安装片段的安装日志历史。

php bin/console.php dbchanger:log F5

========================================

命令display对于显示已安装片段的SQL内容或安装日志条目非常有用。

php bin/console.php dbchanger:display F5
php bin/console.php dbchanger:display L10

========================================

将dbChange或单个片段的内容导出到文件也是有用的。例如,在手动dbChange的情况下,SQL只能由单独的进程执行。以下命令将为环境DEV、dbChange 12345和索引为7的片段生成最终SQL内容。输出文件夹可以在配置文件中指定。

php bin/console.php dbchanger:generate DEV 12345

php bin/console.php dbchanger:generate DEV 12345 X7

php bin/console.php dbchanger:generate DEV 12345 X7 -d

如果指定了-d,则输出将输出到标准输出。

config.neon中指定的inputDirectory中搜索源dbChange内容。在config.neon中指定的outputDirectory中存储生成的内容。

特殊的SQL片段类型

  • 可以指定不同的分隔符(例如,在Oracle创建过程/触发器的情况下),只需添加注释-- DELIMITER,参见示例

  • 当需要替换组占位符时,可以只多次执行SQL查询的一部分。为此,请参见示例/*START*//*END*//*GLUE_STARTGLUE_END*/的使用。

TODO

  • 在源代码中添加注释

  • 检查命令 - 检查所有连接,检查所有序列

  • 重新初始化命令 - 当环境、组、用户更改/添加/删除时,反映此更改

  • 回滚命令 - 添加对逆dbChange的支持并实现dbChange回滚

  • 列表命令 - 列出可以注册的所有dbchange