Yugabyte: サポートされているオブジェクトおよび操作

次のリストは、Yugabyte用のOracle GoldenGateでサポートされているオブジェクトおよび操作を示しています:
  • Oracle GoldenGateのExtractでは、yboutputプラグインがサポートされています。

  • レプリカ・アイデンティティCHANGEはYugabyteのネイティブな設定であり、他のレプリカ・アイデンティティ・タイプと比較してパフォーマンスが向上するため、yboutputプラグインの使用時に推奨されます。

  • 双方向レプリケーションは、yboutputプラグインでサポートされています。双方向レプリケーションにyboutputプラグインを使用する場合、CDC Extractプロセスを開始する前に、Oracle GoldenGateチェックポイント表を作成してパブリケーション・リストに含める必要があります。

    また、レプリケーション・スロットは、チェックポイント表が作成されてパブリケーションに追加された後にのみ作成する必要があります。

  • 双方向レプリケーションは、test_decodingプラグインでサポートされています。test_decodingプラグインを使用する場合、Extractを登録する前に、チェックポイント表を含むすべての表を作成する必要があります。PGOUTPUTプラグインの場合、Extract登録の前に、チェックポイント表とその他の関連する表をすべてパブリケーションに含める必要があります。

    ノート:

    チェックポイント表を含め、いずれの表も削除しないでください。
  • 複数の切捨て操作は、pgoutput/yboutputプラグインでのみサポートされています。

  • pgplugintypeオプションで拡張されたRegisterコマンド:
    • pgplugintypeオプションは、Webインタフェースと管理クライアントの両方でREGISTER EXTRACTコマンドで使用できます。このオプションを使用すると、論理デコード・プラグインとしてtest_decodingまたはpgoutputのいずれかを選択できます。

    • pgplugintype pgoutputを指定すると、基礎となるモジュールは自動的にyboutputプラグインを使用してExtractプロセスを登録します。

    • pgplugintypeを指定しない場合、CDC Extractはデフォルトで test_decodingプラグインを使用して登録します。

    • Yugabyteでyboutputプラグインに明示的に登録するには、pgoutputプラグイン・タイプを指定する必要があります。

      構文:

      REGISTER EXTRACT group_name PGPLUGINTYPE plugin_option; 

      例:

      REGISTER EXTRACT ext_yb PGPLUGINTYPE pgoutput;
  • 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 (ラージ・オブジェクト)のサイズが200 MBから400 MBの場合、トランザクション全体が(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モジュールに自動的に再接続されるようにし、停止時間を最小限に抑えて、スロットが期限切れにならないようにします。

  • パブリケーションに適格な表のみ: パブリケーションに含めることができるのは、永続的なベース表およびパーティション表です。次のオブジェクト・タイプはパブリケーションの一部にできません:
    • 一時表

    • ログ記録されない表

    • 外部表

    • マテリアライズド・ビュー

    • 通常のビュー

  • CDC Extractに対するパブリケーションの削除の影響: CDC Extractの実行中にパブリケーションが削除された場合、レプリケーション・スロットが破損し、機能が停止するリスクがあります。このような場合、影響を受けるレプリケーションスロットが使用できなくなり、単に同じパブリケーションを再作成しても問題は解決しません。既存のストリームで再開する解決方法はなく、新しいパブリケーションを作成して、それを新しいレプリケーション・スロットに関連付けることが唯一の方法です。
  • タイムゾーン(TZ)の制限事項: WAL送信者プロセスは、コミットされたタイムスタンプを常にUTCで送信します。Oracle GoldenGateセッション・タイムゾーンがUTCと異なる場合、CDC Extractプロセスのタイムスタンプによる位置決め中に不一致が発生する可能性があります。この問題を回避するには、デプロイメント・レイヤーで環境変数TZ=UTCを設定する必要があります。この制限は、特にyboutputプラグインに適用されます。

  • pgoutputプラグインは、Yugabyteではサポートされていません。

  • グローバリゼーションは、yboutputプラグインではサポートされていません

  • 表の主キー: YugabyteのCDCストリーミングでは、主キーのある表のみがサポートされます。主キーのない表は、Oracle GoldenGate CDC Extractによって取得されません。

  • Yugabyteでの主キーの更新: YugabyteでのPK UPDATEでは、DELETEの後にINSERTが記録されます。Oracle GoldenGateのExtractでは、PK UPDATEの統計がDELETEおよびINSERTのみとして表示されます。Extractの統計では統計は更新操作として表示されませんが、ソースおよびターゲットのデータに相違はありません。

  • レプリカ・アイデンティティの動作: スロットの作成時に存在する表のレプリカ・アイデンティティは、スロットの作成後に変更できません。ただし、スロットの作成後に作成されたすべての新しい表のレプリカ・アイデンティティは、ysql_yb_default_replica_identitycdcsdk_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ログ・データが失われる可能性があることを意味します。WALの保持は、cdc_intent_retention_mscdc_wal_retention_time_secsなどの2つのパラメータがWALログを長期間保持するように調整されるまで、Yugabyteでは保証されません。これは、Oracle GoldenGate Extractプロセスが実行されているすべてのノードまたはクラスタで調整する必要があります。

    推奨される値は次のとおりです:

    cdc_wal_retention_time_secs=86400

    cdc_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-size-limit

  • DML操作でのSAVEPOINTおよびロールバックの制限: Oracle GoldenGateのCDC Extractでは、SAVEPOINTロールバック操作はサポートされません。CDC test_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上に構築されているためです。