3.9. 在 Debezium 连接器的捕获模式中更新 Db2 表的模式
虽然 Debezium Db2 连接器可以捕获模式更改,以更新模式,但您必须与数据库管理员合作,以确保连接器继续生成更改事件。这是 Db2 实施复制的方式所需要的。
对于捕获模式中的每个表,Db2 中的复制功能会创建一个 change-data 表,其中包含该源表的所有更改。但是 change-data 表模式是静态的。如果以捕获模式为表更新模式,那么您还必须更新其对应 change-data 表的模式。Debezium Db2 连接器无法做到这一点。具有升级特权的数据库管理员必须更新处于捕获模式的表的模式。
在同一表中有新的模式更新前,完全执行模式更新非常重要。因此,建议只在单一批处理中执行所有 DDL,因此仅执行 schema 更新过程。
更新表模式通常有两个步骤:
每种方法都有优缺点。
3.9.1. 为 Debezium Db2 连接器执行离线 schema 更新
在执行离线 schema 更新前,您可以停止 Debezium Db2 连接器。虽然这是安全的模式更新过程,但可能不适用于具有高可用性要求的应用程序。
先决条件
- 处于捕获模式的一个或多个表需要 schema 更新。
流程
- 暂停更新数据库的应用程序。
- 等待 Debezium 连接器流传输所有未流更改事件记录。
- 停止 Debezium 连接器。
- 对源表 schema 应用所有更改。
-
在 ASN 注册表中,将更新的模式标记为
INACTIVE
。 - 重新初始化 ASN 捕获服务。
- 通过运行 Debezium UDF 从捕获模式中删除表,将带有旧模式的源表从捕获模式中删除。
- 通过运行 Debezium UDF 将源表添加到捕获模式 ,方法是运行 Debezium UDF 以将表添加到捕获模式。
-
在 ASN 注册表中,将更新的源表标记为
ACTIVE
。 - 重新初始化 ASN 捕获服务。
- 恢复更新数据库的应用程序。
- 重启 Debezium 连接器。
3.9.2. 为 Debezium Db2 连接器执行在线 schema 更新
在线 schema 更新不会导致应用程序和数据处理的停机时间。也就是说,在执行在线 schema 更新前,不会停止 Debezium Db2 连接器。另外,在线模式更新步骤比离线 schema 更新的步骤简单。
但是,当表处于捕获模式时,在更改为列名称后,Db2 复制功能将继续使用旧列名称。新的列名称不会出现在 Debezium 更改事件中。您必须重启连接器来查看更改事件中的新列名称。
先决条件
- 处于捕获模式的一个或多个表需要 schema 更新。
在表末尾添加列时的步骤
- 锁定您要更改其模式的源表。
-
在 ASN 注册表中,将锁定的表标记为
INACTIVE
。 - 重新初始化 ASN 捕获服务。
- 将所有更改应用到源表的 schema。
- 将所有更改应用到对应的 change-data 表的 schema。
-
在 ASN 注册表中,将源表标记为
ACTIVE
。 - 重新初始化 ASN 捕获服务。
- 可选。重启连接器,查看更改事件中更新的列名称。
在表的中间添加列时的步骤
- 锁定要更改的源表。
-
在 ASN 注册表中,将锁定的表标记为
INACTIVE
。 - 重新初始化 ASN 捕获服务。
对于要更改的每个源表:
- 在 source 表中导出数据。
- 截断源表。
- 更改源表并添加列。
- 将导出的数据加载到更改的源表中。
- 在源表对应的 change-data 表中导出数据。
- 截断 change-data 表。
- 更改 change-data 表并添加列。
- 将导出的数据加载到更改的 change-data 表中。
-
在 ASN 注册表中,将表标记为
INACTIVE
。这会将旧的 change-data 表标记为不活动状态,允许其中的数据保留,但不再更新它们。 - 重新初始化 ASN 捕获服务。
- 可选。重启连接器,查看更改事件中更新的列名称。