YugabyteDB:处理方案更改
了解如何在 Oracle GoldenGate 中为 YugabyteDB 处理方案更改。
处理方案更改的先决条件
要支持在 Yugabyte 数据库中的表和列级别更改任何方案, T-Server 和主标志列表都需要以下配置:
cdcsdk_publication_list_refresh_interval_secs
-
定义发布列表的刷新间隔。
-
根据适合您环境的等待时间进行配置(默认值:900 秒)。
cdcsdk_enable_dynamic_table_support
-
在 CDC 中启用动态表支持。
-
默认情况下,该值设置为
true。确认 T-Server 和 Master gflags 均为显式 true。
在 Oracle GoldenGate for Yugabyte 中处理方案更改的准则
在 Yugabyte 数据库上执行 DDL 操作时,必须遵循以下准则:
-
执行 DML 操作前,请始终遵循
cdcsdk_publication_list_refresh_interval_secs间隔。 -
停止提取,以确保安全方案更改并防止潜在的数据捕获问题。
-
重新启动提取后,请始终验证是否正确捕获了新列或剩余列。
-
Yugabyte 数据库不支持删除表。请参阅以下链接以了解更多信息:
处理表级别方案更改
了解如何在 Oracle GoldenGate 中为 YugabyteDB 处理表级方案更改。
将新表添加到现有提取处理
此过程取决于 Yugabyte 的发布配置。出版物有两种类型:
-
为所有表配置的发布:在此类型的发布中,将动态添加新表,并且不需要对发布进行任何更改。
-
为一组表配置的发布:如果创建新表,则必须更改发布以包括新表。
将新表添加到现有提取处理
以下是为现有“提取”处理添加新表的常见步骤:1。在进行更改之前停止“提取”处理。
-
更新提取参数文件以将新表添加到提取配置中。
-
等待在
cdcsdk_publication_list_refresh_interval_secs中定义的刷新间隔。(可选)允许较小的缓冲区窗口,以确保在 CDC 模块中完全刷新表。
-
刷新间隔完成后重新启动“提取”处理。
-
对新表执行 DML 操作。
-
验证提取是否成功获取新记录。
将新表添加到现有提取处理 - 示例
考虑此示例的方案:
一个表存在两个已配置的发布:
-
出版物 1(pub1):具体表
-
出版物 2(pub2):所有表格
-
两个提取(使用 pub1 的 Ext1 ,使用 pub2 的 Ext2 )以及静态表列表
-
对静态表的 DML 操作由两个提取进行捕获
以下示例提供了根据上述注意事项将新表添加到现有“提取”处理的步骤:
-
停止 Ext1 和 Ext2 。
-
创建新表(table2 、table3 )。
-
更新 Ext1 和 Ext2 的提取参数文件。
-
更改 pub1 以包括新表。Pub2 不需要更改。
-
重新启动 Ext1 和 Ext2 。
-
等待刷新间隔 (
cdcsdk_publication_list_refresh_interval_secs)。 -
对新表执行 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。在开始向表中添加列之前,请停止“提取”处理。这可防止提取异常终止。
-
使用以下命令在表中添加出版物中包括的列:
ALTER TABLE...ADD COLUMN -
等待
cdcsdk_publication_list_refresh_interval_secs中指定的持续时间,以确保 CDC 模块刷新并识别新列。 -
对新列运行任何 DML 操作(INSERTS、UPDATES 或 DELETES)。
-
重新启动提取处理并验证是否已成功捕获更改,包括对新列的 DML 操作。
删除列
要从属于发布内容的表中删除列,请执行以下操作:1。停止“提取”处理。虽然删除列通常不会导致提取异常终止,但仍建议在进行方案更改之前停止提取。
-
对发布中包含的表运行以下命令:
ALTER TABLE ... DROP COLUMN -
等待
cdcsdk_publication_list_refresh_interval_secs中指定的持续时间,以确保更新 CDC 模块。 -
根据需要运行任何 DML 操作(INSERT、UPDATE、DELETE)。
-
重新启动提取并确认继续正确捕获其余列的 DML 操作。