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