Yugabyte: サポートされているオブジェクトおよび操作
次のリストは、Oracle GoldenGate for Yugabyteでサポートされているオブジェクトおよび操作を示しています。
-
Oracle GoldenGate Extractでは、
yboutputプラグインがサポートされています。 -
レプリカ・アイデンティティ
CHANGEはYugabyteのネイティブ設定であり、他のレプリカ・アイデンティティ・タイプと比較してパフォーマンスが向上するため、yboutputプラグインの使用時に推奨されます。 -
双方向レプリケーションは、
yboutputプラグインでサポートされています。双方向レプリケーションにyboutputプラグインを使用する場合、CDC Extractプロセスを開始する前に、Oracle GoldenGateチェックポイント表を作成して公開リストに含める必要があります。また、レプリケーション・スロットは、チェックポイント表が作成されて公開に追加された後にのみ作成する必要があります。
-
双方向レプリケーションは、
test_decodingプラグインでサポートされています。test_decodingプラグインを使用する場合、Extractを登録する前に、チェックポイント表を含むすべての表を作成する必要があります。PGOUTPUTプラグインの場合、Extract登録の前に、チェックポイント表と他のすべての関連表が公開に含まれている必要があります。
ノート:チェックポイント表を含む表は削除しないでください。
-
複数の切捨て操作は、
pgoutput/yboutputプラグインでのみサポートされています。 -
pgplugintypeオプションを使用して拡張されたコマンドを登録します。-
pgplugintypeオプションは、Webインタフェースと管理クライアントの両方でREGISTER EXTRACTコマンドで使用できます。このオプションを使用すると、論理デコードプラグインとしてtest_decodingまたはpgoutputのいずれかを選択できます。 -
pgplugintype pgoutputを指定すると、基礎となるモジュールは自動的にyboutputプラグインを使用してExtractプロセスを登録します。 -
pgplugintypeを指定しない場合、CDC Extractはデフォルトで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> -
-
STREAMINGOPTIONSパラメータは、TRANLOGOPTIONSの下に導入されています。このパラメータを使用すると、レプリケーション開始コマンドにpublication_nameを指定できます。例:
TRANLOGOPTIONS STREAMINGOPTIONS (publication_names="my*123,my_publication2,123 pub,my_publication";)このパラメータを使用する場合は、次のガイドラインおよび制限を考慮する必要があります。
- Extractプロセスを登録する前に、パブリケーションを作成する必要があります。
公開名に、カンマ(、)一重引用符(')二重引用符(")などの特殊文字を含めることはできません。
-
publication_names内のカンマ区切りリストとして、複数のパブリケーション名を指定できます。たとえば:
TRANLOGOPTIONS STREAMINGOPTIONS (publication_names="my*123,my_publication2,123 pub,my_publication";)
リストの最後の文書名はセミコロン(;)で終わる必要があります
Yugabyteの制限
キャプチャおよび配信用に設定する際に、Yugabyteデータベースに対して次の制限を考慮します。
-
大きなLOBトランザクションがない: LOB (ラージ・オブジェクト)のサイズが200MBから400MBの場合、トランザクション全体(INSERTまたはUPDATEのいずれの場合も)がCDCストリームから欠落している可能性があります。
-
同じトランザクションでの複数の更新によるダウンストリームでのデータの不一致: 同じトランザクション内で複数の更新が発生すると、表のレプリカ・アイデンティティが
FULLまたはDEFAULTに設定されている場合、YugabyteのCDCSDKモジュールが正しいAFTERイメージの送信に失敗する可能性があります。これにより、ダウンストリーム・システム内のAFTERイメージのデータ不一致が発生する可能性があります。 -
レプリケートされた表のDDL (test_decodingプラグイン)の後にレプリケーション接続が終了します:
test_decodingプラグインを使用すると、データベース内のすべての表がデフォルトでポーリング・リストに自動的に含まれます。このリストに含まれている表に対してDDL操作(表の削除など)が実行されると、サーバーはレプリケーション接続を終了します。ただし、ポーリング・リストの一部である表の削除は、test_decodingプラグインではサポートされないため、この柔軟性が必要な場合は、yboutputプラグインに切り替える必要があります。ノート:表を削除する前に、レプリケーション・エラーや接続の中断を回避するために、表が公開の一部ではないことを確認してください。同様に、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モジュールに自動的に再接続できるようにし、停止時間を最小限に抑え、スロットの有効期限を回避します。
-
-
BatchMechanism 3がProgress DD driverで設定されている場合、BatchSQLは正しく機能しません。これは、ReplicatプロセスのYugabyteのデフォルトです。したがって、BatchSQLを使用する必要がある場合は、Replicatパラメータ・ファイルでDBOPTIONS _BatchMechanism 2設定を構成して、適切な機能を実現する必要があります。この回避策は、Oracle GoldenGate 23.10以上のReplicatプロセスにYugabyteで適用できます。 -
公開対象のみの表: 永続ベース表およびパーティション表は、公開に含めることができます。次のオブジェクト型は、パブリケーションの一部にはできません。
-
一時表
-
ログに記録されていない表
-
外部テーブル
-
マテリアライズド・ビュー
-
通常のビュー
-
-
CDC Extractに対するパブリケーション削除の影響: CDC Extractの実行中にパブリケーションが削除された場合、レプリケーション・スロットが破損し、機能が停止するリスクがあります。このような場合、影響を受けるレプリケーションスロットが使用できなくなり、単に同じパブリケーションを再作成しても問題は解決しません。既存のストリームで再開する解決策はなく、新しいパブリケーションを作成し、それを新しいレプリケーションスロットに関連付けるだけです。
-
タイムゾーン(TZ)の制限: WALセンダー・プロセスは、コミットされたタイムスタンプをUTCで常に送信します。Oracle GoldenGateセッション・タイムゾーンがUTCと異なる場合、CDC Extractプロセスのタイムスタンプによる位置決め中に不一致が発生する可能性があります。この問題を回避するには、デプロイメント・レイヤーで環境変数
TZ=UTCを設定する必要があります。この制限は、特にyboutputプラグインに適用されます。 -
pgoutputプラグインは、Yugabyteではサポートされていません。 -
グローバリゼーションは、
yboutputプラグインではサポートされていません -
表の主キー: CDCストリーミング(Yugabyte)では、主キーを持つ表のみがサポートされます。主キーを持たない表は、Oracle GoldenGate CDC Extractによって取得されません。
-
Yugabyteでの主キーの更新: YugabyteでのPK UPDATEは、DELETEの後にINSERTとして記録されます。Oracle GoldenGate Extractでは、PK UPDATEの統計がDELETEおよびINSERTのみとして表示されます。統計はExtract統計では更新操作として表示されませんが、ソースおよびターゲットのデータに相違はありません。
-
レプリカ識別情報動作: スロットの作成時に存在する表のレプリカ識別情報は、スロットの作成後に変更できません。ただし、スロットの作成後に作成されたすべての新しい表のレプリカIDは、
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 -
End of Log (EOL)またはEnd of File (EOF)による配置はサポートされていません: EOL/EOFのかわりに、現在のタイムスタンプでスロット位置を変更できます。これにより、既存のレコードがフィルタ処理されます。
-
切捨て操作:
GETTRUNCATES/IGNORETRUNCATESなどのパラメータはサポートされません。データベースでは、ユーザーが変更データ取得が有効になっている場合に表を切り捨てることができないためです。 -
WAL保持: 通常、Yugabyteは一定期間後にWALセグメントをパージします。つまり、Extractが長時間停止しているときにログが切り捨てられると、Oracle GoldenGateによってWALログ・データが失われる可能性があります。WAL保存は、
cdc_intent_retention_msやcdc_wal_retention_time_secsなどの2つのパラメータが長期間WALログを保持するように調整されるまで、Yugabyteでは保証されません。これは、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コマンドを受け入れません。その結果、ロールバックによって除外されるはずのレコードは、Extractによって取得および処理されます。この動作は、Yugabyte CDC SDKモジュールの既知の制限です。詳細は、次のリンクを参照してください。
https://yugabyte.atlassian.net/browse/DB-11714
https://docs.yugabyte.com/stable/develop/change-data-capture/using-logical-replication/#limitations
-
表の削除の制限: スロットが作成されると、ユーザーはスロットが削除されるまでデータベースから表を削除しないでください。スロットがアクティブで、ユーザーがデータベースから表を削除しようとすると、CDC Extractは、レプリケーションの一部である他のCDC表からレコードを取得できなくなります。また、CDC Extractを実行している場合は、スロットが作成されているデータベース上の表も削除しないようにすることをお薦めします。これに従わないと、CDC Extractは、次のような切断エラーで異常終了します。
Error: The server has ended the streaming connection. -
statement_timeoutの制限: Yugabyteパラメータ
statement_timeoutは、ユーザー・レベルまたはデータベース・レベルで変更しないでください。また、デフォルトに保持する必要があります。これを小さい値に設定すると、CDC ExtractはWALからレコードを読み取れません。必要に応じて、常にセッション・レベルでのみ設定する必要があります。 -
読取り専用モードのレプリカ・ノードでのスロットの作成はサポートされていません: CDC Extractは、レプリカ・ノードからレコードを取得できません。これは、2024.2.1.0や2024.2.2.0のようなサポートしているバージョンが、レプリカ・ノードでのスロットの作成をサポートしていないPostgreSQL 11.2上に構築されているためです。