YugabyteDB:處理結構描述變更
瞭解如何處理 Oracle GoldenGate for YugabyteDB 中的綱要變更。
處理綱要變更的先決條件
為了支援 Yugabyte 資料庫中表格和資料欄層次的任何綱要變更, T 伺服器和主要旗標清單都需要下列組態:
cdcsdk_publication_list_refresh_interval_secs
-
定義出版品清單的重新整理間隔。
-
根據適合您環境的等待時間進行設定 (預設為 900 秒)。
cdcsdk_enable_dynamic_table_support
-
在 CDC 中啟用動態表格支援。
-
依預設,它會設為
true。確認 T-Server 和 Master gflags 均為明確。
處理 Oracle GoldenGate for Yugabyte 綱要變更的準則
在 Yugabyte 資料庫執行 DDL 作業時,必須考量下列準則非常重要:
-
執行 DML 作業之前,請一律遵守
cdcsdk_publication_list_refresh_interval_secs間隔。 -
停止 Extract 以確保綱要變更安全,並防止發生潛在的資料擷取問題。
-
重新啟動 Extract 之後,請一律驗證已正確擷取新的或剩餘的資料欄。
-
Yugabyte 資料庫不支援刪除表格。請參閱下列連結以瞭解詳細資訊:
處理表格層次綱要變更
瞭解如何處理 Oracle GoldenGate for YugabyteDB 中的表格層次綱要變更。
新增表格至現有的擷取處理程序
此程序取決於 Yugabyte 的發布組態。出版品有兩種類型:
-
為所有表格設定的發布:在此類型的發布中,會動態新增表格,且公布不需要任何變更。
-
為一組表格設定發布:如果建立新表格,則必須更改發布以包含新表格。
新增表格至現有的 Extract 處理作業
以下為新增現有「摘錄」處理程序之表格的通用步驟:1。請先停止「摘錄」處理程序,再進行變更。
-
更新 Extract 參數檔,將新的表格或表格新增至 Extract 組態。
-
等待
cdcsdk_publication_list_refresh_interval_secs中定義的「重新整理間隔」。(選擇性) 允許小型緩衝區視窗,以確保 CDC 模組中的表格完全重新整理。
-
重新整理間隔完成後重新啟動 Extract 處理作業。
-
對新表格執行 DML 作業。
-
驗證擷取已順利擷取新記錄。
新增表格至現有的擷取處理程序 - 範例
請參考下列範例的案例:
有兩個已設定出版品的表格存在:
-
刊物 1 (pub1):特定表格
-
出版品 2 (pub2):所有表格
-
具有靜態表格清單的兩個擷取 (Ext1 使用 pub1 、Ext2 使用 pub2)
-
靜態表格上的 DML 作業是由兩個 Extract 擷取
下列範例提供根據先前考量,將表格新增至現有「摘錄」處理程序的步驟:
-
停止 Ext1 和 Ext2 。
-
建立新表格 (table2 、table3)。
-
更新 Ext1 與 Ext2 的擷取參數檔。
-
更改 pub1 以包含新表格。Pub2 不需要變更。
-
重新啟動 Ext1 和 Ext2 。
-
等待重新整理間隔 (
cdcsdk_publication_list_refresh_interval_secs)。 -
對新表格執行 DML 作業,並確認兩個 Extract 都已順利擷取。
從擷取處理程序刪除表格
刪除表格時,需要考慮兩種情況:
表格是出版品的一部分
若發佈中包含表格,則不允許刪除表格。如果您嘗試刪除此案例中的表格,它會讓 Extract 使用的串流或複製槽位無法使用,而且您可能會遇到下列錯誤:
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.
注意:如果發生這類錯誤,唯一的解決方法是取消註冊受影響的 Extract 並重新註冊。此步驟對於回復一般 operation.This 而言至關重要,也可能導致資料遺失。因此,請小心。
表格不是出版品的一部分
若表格未包含在任何出版品中,刪除表格並不會影響串流。不需要採取任何動作,複寫將會如常繼續進行。
處理資料欄層次綱要變更
瞭解如何處理資料欄層次綱要變更,例如在 Oracle GoldenGate for YugabyteDB 中新增及刪除資料欄。
新增一個資料欄
在作為出版品一部分的表格上執行 ALTER TABLE … ADD COLUMN 作業:1。請先停止「摘錄」處理程序,再開始新增欄至表格。這可防止 Extract 異常中止。
-
使用下列命令,在公布中所含的表格中新增資料欄:
ALTER TABLE...ADD COLUMN -
等待
cdcsdk_publication_list_refresh_interval_secs中指定的持續時間,以確保 CDC 模組重新整理並辨識新資料欄。 -
在新資料欄執行任何 DML 作業 (INSERTS、UPDATES 或 DELETES)。
-
重新啟動 Extract 處理作業,並確認已順利擷取新資料欄的變更 (包括 DML 作業)。
置放資料欄
若要從屬於出版品的表格刪除資料欄,請執行下列動作:1。停止「擷取」處理程序。雖然刪除資料欄通常不會導致 Extract 異常中止,但仍建議在進行綱要變更之前停止 Extract。
-
在發佈中所包含的表格上執行下列命令:
ALTER TABLE ... DROP COLUMN -
等待
cdcsdk_publication_list_refresh_interval_secs中指定的持續時間,以確定 CDC 模組已更新。 -
視需要執行任何 DML 作業 (INSERT、UPDATE、DELETE)。
-
重新啟動 Extract,並確認其餘資料欄上的 DML 作業會繼續正確擷取。