YugabyteDB:处理方案更改

了解如何在 Oracle GoldenGate 中为 YugabyteDB 处理方案更改。

处理方案更改的先决条件

要支持在 Yugabyte 数据库中的表和列级别更改任何方案, T-Server 和主标志列表都需要以下配置:

cdcsdk_publication_list_refresh_interval_secs

cdcsdk_enable_dynamic_table_support

在 Oracle GoldenGate for Yugabyte 中处理方案更改的准则

在 Yugabyte 数据库上执行 DDL 操作时,必须遵循以下准则:

处理表级别方案更改

了解如何在 Oracle GoldenGate 中为 YugabyteDB 处理表级方案更改。

将新表添加到现有提取处理

此过程取决于 Yugabyte 的发布配置。出版物有两种类型:

  1. 为所有表配置的发布:在此类型的发布中,将动态添加新表,并且不需要对发布进行任何更改。

  2. 为一组表配置的发布:如果创建新表,则必须更改发布以包括新表。

将新表添加到现有提取处理

以下是为现有“提取”处理添加新表的常见步骤:1。在进行更改之前停止“提取”处理。

  1. 更新提取参数文件以将新表添加到提取配置中。

  2. 等待在 cdcsdk_publication_list_refresh_interval_secs 中定义的刷新间隔。

    (可选)允许较小的缓冲区窗口,以确保在 CDC 模块中完全刷新表。

  3. 刷新间隔完成后重新启动“提取”处理。

  4. 对新表执行 DML 操作。

  5. 验证提取是否成功获取新记录。

将新表添加到现有提取处理 - 示例

考虑此示例的方案:

一个表存在两个已配置的发布:

以下示例提供了根据上述注意事项将新表添加到现有“提取”处理的步骤:

  1. 停止 Ext1 和 Ext2 。

  2. 创建新表(table2 、table3 )。

  3. 更新 Ext1 和 Ext2 的提取参数文件。

  4. 更改 pub1 以包括新表。Pub2 不需要更改。

  5. 重新启动 Ext1 和 Ext2 。

  6. 等待刷新间隔 (cdcsdk_publication_list_refresh_interval_secs)。

  7. 对新表执行 DML 操作并验证两个提取是否成功捕获它们。

从提取处理中删除表

删除表时,需要考虑以下两种情况:

表是出版物的一部分

如果该表包含在发布中,则不允许删除该表。如果尝试删除此方案中的表,它将使提取使用的流或复制插槽不可用,并且您可能会遇到以下错误:

2026-03-04 11:21:44 ERROR OGG-30611 Yugabyte has closed the streaming client and has caused the Extract to abend.
Error: ERROR: XX000: LookupByIdRpc(tablet: d092b524eff34d21b45c78ead108122a, num_attempts: 1) failed: Tablet deleted: Table deleted at 2026-03-04 11:21:44 UTC.
CONTEXT: Catalog Version Mismatch: A DDL occurred while processing this query. Try again.LOCATION: YBPrepareCacheRefreshIfNeeded, postgres.c:4160.

或者

2026-03-04 11:22:51 ERROR OGG-30605 Dropping any table used by the Extract will cause the Extract to abend and disconnect the YDB streaming client.
Error: ERROR: XX000: VirtualWAL initialisation failed for stream_id: afdaa2e91ebc288be74724e8fb780342 & session_id: 51: Table 000033cf00003000800000000000400f not found under stream
CONTEXT: Catalog Version Mismatch: A DDL occurred while processing this query. Try again.LOCATION: YBPrepareCacheRefreshIfNeeded, postgres.c:4160.

注意:如果出现此类错误,唯一的解决方法是注销受影响的提取并重新注册。此步骤对于恢复正常 operation.This 至关重要,这也可能导致数据丢失。因此,需要谨慎。

表不是出版物的一部分

如果表未包括在任何发布中,则删除表不会影响流。不需要执行任何操作,复制将照常继续。

处理列级方案更改

了解如何处理列级方案更改,例如在 Oracle GoldenGate 中为 YugabyteDB 添加和删除列。

添加列

要对作为出版物一部分的表执行 ALTER TABLE … ADD COLUMN 操作:1。在开始向表中添加列之前,请停止“提取”处理。这可防止提取异常终止。

  1. 使用以下命令在表中添加出版物中包括的列:

    ALTER TABLE...ADD COLUMN
  2. 等待 cdcsdk_publication_list_refresh_interval_secs 中指定的持续时间,以确保 CDC 模块刷新并识别新列。

  3. 对新列运行任何 DML 操作(INSERTS、UPDATES 或 DELETES)。

  4. 重新启动提取处理并验证是否已成功捕获更改,包括对新列的 DML 操作。

删除列

要从属于发布内容的表中删除列,请执行以下操作:1。停止“提取”处理。虽然删除列通常不会导致提取异常终止,但仍建议在进行方案更改之前停止提取。

  1. 对发布中包含的表运行以下命令:

    ALTER TABLE ... DROP COLUMN
  2. 等待 cdcsdk_publication_list_refresh_interval_secs 中指定的持续时间,以确保更新 CDC 模块。

  3. 根据需要运行任何 DML 操作(INSERT、UPDATE、DELETE)。

  4. 重新启动提取并确认继续正确捕获其余列的 DML 操作。