Yugabyte:支援的物件與作業
下列清單描述 Oracle GoldenGate for Yugabyte 支援的物件和作業:
-
Oracle GoldenGate Extract 支援
yboutputPlugin。 -
複本識別
CHANGE是 Yugabyte 的原生設定,建議在使用yboutput外掛程式時使用,因為它提供比其他複本識別類型更好的效能。 -
yboutputPlugin 支援雙向複製。使用雙向複製的yboutputPlugin 時,必須先建立 Oracle GoldenGate 檢查點表格並包括在發布清單中,再啟動「CDC 擷取」處理作業。此外,只有在建立檢查點表格並新增至發布之後,才應該建立複製槽位。
-
test_decodingPlugin 支援雙向複製。使用test_decodingPlugin 時,必須先建立包含檢查點表格的所有表格,再註冊任何 Extract。如果是PGOUTPUT外掛程式,在 Extract 註冊之前,必須先將檢查點表格以及所有其他相關表格併入發布中。
注意:請勿刪除任何包含檢查點表格的表格。
-
pgoutput/yboutputPlugin 只支援多個截斷作業。 -
使用
pgplugintype選項註冊強制實行的命令:-
Web 介面和「管理用戶端」的
REGISTER EXTRACT指令均提供pgplugintype選項。此選項可讓您選擇test_decoding或pgoutput作為邏輯解碼外掛程式。 -
當您指定
pgplugintype pgoutput時,基礎模組會自動使用yboutputPlugin 來註冊 Extract 處理作業。 -
如果您未指定任何
pgplugintype,則「CDC 擷取」預設會使用test_decoding外掛程式來註冊。 -
若要明確向 Yugabyte 中的
yboutput外掛程式註冊,您必須指定pgoutput外掛程式類型。
語法:
<pre class="copy"><code>REGISTER EXTRACT *group_name* PGPLUGINTYPE *plugin_option*;</code></pre>範例:
<pre class="copy"><code>REGISTER EXTRACT ext_yb PGPLUGINTYPE pgoutput;</code></pre> -
-
已在
TRANLOGOPTIONS下導入STREAMINGOPTIONS參數。此參數可讓您指定複製啟動命令的publication_name。範例:
TRANLOGOPTIONS STREAMINGOPTIONS (publication_names="my*123,my_publication2,123 pub,my_publication";)使用此參數時,必須考量下列準則與限制:
- 必須先建立公布,才能登錄「擷取」處理。
出版品名稱不得包含特殊字元,包含逗號 (,) 單引號 (') 雙引號 (")。
-
可以將多個發佈名稱指定為 publication_names 內的逗號分隔清單。舉例而言:
TRANLOGOPTIONS STREAMINGOPTIONS (publication_names="my*123,my_publication2,123 pub,my_publication";)
清單中的最後一個出版品名稱必須以分號 (;) 結尾
Yugabyte 限制
在設定用於擷取和傳遞的 Yugabyte 資料庫時,請考慮下列 Yugabyte 資料庫限制:
-
遺漏大型 LOB 交易:當 LOB (大型物件) 的大小在 200 MB 到 400 MB 之間時,CDC 串流中可能會遺漏整個交易 (不論是 INSERT 或 UPDATE)。
-
由於相同交易中有多個更新,下游中的資料不相符:在相同交易中發生多個更新時,如果表格的複本識別設為
FULL或DEFAULT,則 Yugabyte 中的CDCSDK模組可能會無法傳送正確的 AFTER 影像。這可能會導致下游系統中的 AFTER 影像發生資料差異。 -
複製連線會在複製表格 (test_decoding Plugin) 的 DDL 之後終止:使用
test_decodingPlugin 時,依照預設,資料庫中的所有表格都會自動包括在輪詢清單中。如果在此清單中包含的任何表格執行 DDL 作業 (例如表格刪除),伺服器就會終止複製連線。不過,test_decodingPlugin 不支援刪除輪詢清單中的表格,因此,如果您需要此彈性,應該切換至yboutputPlugin。注意:刪除表格之前,請確定它不屬於任何發布項目,以避免發生複製錯誤或連線中斷。同樣地,請勿刪除 Oracle GoldenGate 檢查點表格,因為這也會導致相同的錯誤。
-
複製槽位因無活動而過期:複製槽位會保留特定資源,以防止複製所需的 WAL (預寫日誌) 記錄資源回收。如果槽位在延長期間內仍為非作用中狀態,則該槽位會標示為已到期,並釋出保留的資源。過期之後,複製插槽即無法使用,必須重新建立。
預設保留視窗 :
-
從版本 2024.2.1 開始的 8 小時
-
2024.2.1 版之前的 4 小時版本
這是 Yugabyte 網站上所提及的已知問題:
https://github.com/yugabyte/yugabyte-db/issues/27766
防止到期的建議動作:
-
啟用活動訊號功能以確保持續的 WAL 活動並防止長時間閒置。
-
設定 CDC 處理作業的 autostart 或 autorestart 選項,以自動重新連線至
CDCSDK模組,將停止工作時間降到最低並避免發生槽位過期。
-
-
使用進度 DD 驅動程式設定
BatchMechanism 3時,BatchSQL 無法正確運作,這是 Yugabyte Replicat 處理作業的預設值。因此,如果您需要使用 BatchSQL,您必須在 Replicat 參數檔中設定 DBOPTIONS _BatchMechanism 2 設定值,才能取得適當的功能。此解決方法可套用至 Oracle GoldenGate 23.10 和更新版本的 Replicat 處理作業 (Yugabyte)。 -
僅適用於發布的表格:發布中可以包含永久基礎表格和分割的表格。下列物件類型不可以是公布的一部分:
-
暫存表
-
未記錄的表格
-
外形尺寸
-
具體化視觀表
-
一般檢視
-
-
對 CDC 擷取的發布刪除影響:如果在「CDC 擷取」仍在執行時刪除發布,複寫槽位有損毀的風險,導致發布停止運作。在這種情況下,受影響的複製插槽將無法使用,而單純重新建立相同的發布也將無法解決此問題。沒有可在現有串流上繼續的解決方案,而且唯一的方法是建立新的發布,並將它與新的複製插槽建立關聯。
-
時區限制 (TZ): WAL 寄件者處理一律會以 UTC 傳輸已確認的時戳。如果 Oracle GoldenGate 階段作業時區與 UTC 不同,則在「CDC 擷取」處理作業中依時戳定位時,可能會發生差異。若要避免此問題,您必須在部署層設定環境變數
TZ=UTC。此限制特別適用於yboutput外掛程式。 -
Yugabyte 不支援
pgoutputPlugin。 -
yboutputPlugin 不支援全域化 -
表格上的主索引鍵:Yugabyte 的 CDC 串流只支援具有主索引鍵的表格。沒有主索引鍵的表格將不會被 Oracle GoldenGate CDC Extract 擷取。
-
主索引鍵更新 (Yugabyte) :Yugabyte 中的 PK UPDATE 將記錄為 DELETE,後面接著 INSERT。Oracle GoldenGate Extract 只會將 PK UPDATE 的統計資料顯示為 DELETE 和 INSERT。雖然統計資料在 Extract 統計資料中不會顯示為更新作業,但來源和目標的資料不會有任何差異。
-
複本識別行為:建立槽位之後,就無法變更建立槽位時之表格的複本識別。不過,您可以使用
ysql_yb_default_replica_identity、cdcsdk_publication_list_refresh_interval_secs和csdk_enable_dynamic_table_support tserver旗標設定在建立槽位後建立之所有新表格的複本識別。在建立新表格之前,必須先在主要和t-server中設定這些旗標。依預設,
cdcsdk_publication_list_refresh_interval_secs會設為 900 秒,也就是 15 分鐘。您必須依需求設定此項目。若降低其值,將會快速減少 CDCSDK 模組中新建立的表格重新整理,以協助 Oracle GoldenGate 擷取這些新表格的任何記錄。下列範例顯示建立 SLOT 之後,為動態建立表格設定的旗標:ysql_yb_default_replica_identity=FULL,cdcsdk_publication_list_refresh_interval_secs=120,cdcsdk_enable_dynamic_table_support=true -
不支援依日誌結尾 (EOL) 或檔案結尾 (EOF) 定位:您可以依目前時間戳記更改槽位位置,以篩選現有記錄,而非 EOL/EOF。
-
截斷作業:不支援
GETTRUNCATES/IGNORETRUNCATES等參數,因為資料庫不允許使用者截斷表格 (如果已啟用變更資料擷取的話)。 -
WAL 保留:Yugabyte 通常會在一段時間後永久清除 WAL 區段。這表示如果在 Extract 停止運作的時間較長時截斷日誌,Oracle GoldenGate 可能會遺失 WAL 日誌資料。在調整一些參數 (例如
cdc_intent_retention_ms和cdc_wal_retention_time_secs) 以保留WAL日誌的持續時間較長之前,不保證在 Yugabyte 中保留 WAL。這應該在執行 Oracle GoldenGate Extract 處理作業的所有節點或叢集中進行調整。建議值如下:
cdc_wal_retention_time_secs=86400cdc_intent_retention_ms = 86400000 -
UNREGISTER EXTRACT命令:Oracle GoldenGate 會使用UNREGISTER EXTRACT命令來刪除複製插槽。複製插槽的從屬端至少在停止ysql_cdc_active_replication_slot_window_ms持續時間後才能刪除。旗標的預設值為 5 分鐘,這表示您必須等待複製插槽可維持非作用中的時間範圍上限,才能被視為過時。如果是叢集設定,則必須在具有相同值的所有節點中調整此參數。
-
BLOB/CLOB限制:資料類型 (例如文字 / 影像) 具有僅擷取 200MB 資料的限制。資料列大小不應超過 32MB,且每個包含 LOB 資料的資料欄應保留最多 2MB。https://docs.yugabyte.com/stable/develop/best-practices-ysql/#row- 大小限制
-
在 DML 作業中具有 SAVEPOINT 和倒回的限制:Oracle GoldenGate CDC Extract 不支援
SAVEPOINT倒回作業。CDCtest_decoding外掛程式不採用ROLLBACK TO SAVEPOINT指令。因此,「擷取」仍會擷取並處理應被排除的記錄。這種行為是已知的 Yugabyte CDC SDK 模組限制。若要進一步瞭解,請參閱下列連結:
https://yugabyte.atlassian.net/browse/DB-11714
https://docs.yugabyte.com/stable/develop/change-data-capture/using-logical-replication/#limitations
-
刪除表格限制:建立槽位之後,使用者必須等到刪除槽位時,才能夠從資料庫刪除任何表格。如果槽位為作用中狀態,且使用者嘗試從資料庫刪除任何表格,則「CDC 擷取」將無法從複製中包含的其他 CDC 表格擷取任何記錄。此外,建議在執行 CDC 擷取時,也不要在建立槽位的資料庫上刪除任何表格。如果未遵循此項,則「CDC 擷取」會中止與下列類似的中斷連線錯誤:
Error: The server has ended the streaming connection. -
statement_timeout 的限制:不應在使用者或資料庫層次修改 Yugabyte 參數
statement_timeout,且應保留為預設值。如果設為較低值,則「CDC 擷取」將無法從WAL讀取記錄。如有需要,應該一律只在階段作業層次設定。 -
不支援在複本節點中建立唯讀模式的槽位:CDC Extract 將無法從複本節點擷取記錄。這是因為我們支援的版本 (例如 2024.2.1.0 或 2024.2.2.0) 建立在 PostgreSQL 11.2 之上,不支援在複本節點中建立槽位。