YugabyteDB: スキーマ変更の処理
Oracle GoldenGate for YugabyteDBでのスキーマ変更の処理について学習します。
スキーマ変更を処理するための前提条件
Yugabyteデータベースの表レベルおよび列レベルでスキーマ変更をサポートするには、Tサーバーとマスターgflagリストの両方に次の構成が必要です。
cdcsdk_publication_list_refresh_interval_secs
-
パブリケーション・リストのリフレッシュ間隔を定義します。
-
環境に適した待機時間に従って構成します(デフォルトは900秒)。
cdcsdk_enable_dynamic_table_support
-
CDCでの動的表サポートを有効にします。
-
デフォルトでは、
trueに設定されています。Tサーバーとマスターgflagsの両方で明示的にtrueであることを確認します。
Oracle GoldenGate for Yugabyteのスキーマ変更を処理するためのガイドライン
次のガイドラインは重要であり、YugabyteデータベースでDDL操作を実行する場合は考慮する必要があります。
-
DML操作を実行する前に、必ず
cdcsdk_publication_list_refresh_interval_secs間隔を考慮してください。 -
Extractを停止して、スキーマを安全に変更し、潜在的なデータ取得の問題を防止します。
-
Extractを再起動した後、新しい列または残りの列が適切に取得されていることを常に検証します。
-
Yugabyteデータベースは表の削除をサポートしていません。詳細は、次のリンクを参照してください。
表レベルのスキーマ変更の処理
Oracle GoldenGate for YugabyteDBでの表レベルのスキーマ変更の処理について学習します。
既存のExtractプロセスへの新規表の追加
この手順は、Yugabyteの公開構成によって異なります。パブリケーションには、2つのタイプがあります。
-
すべての表に対して構成されたパブリケーション: このタイプのパブリケーションでは、新しい表が動的に追加され、パブリケーションに変更を加える必要はありません。
-
表セットに対して構成された公開: 新しい表が作成された場合は、新しい表が含まれるように公開を変更する必要があります。
既存のExtractプロセスへの新規表の追加
既存のExtractプロセス用に新しい表を追加する一般的なステップは次のとおりです: 1。変更を行う前にExtractプロセスを停止します。
-
Extractパラメータ・ファイルを更新して、新しい表をExtract構成に追加します。
-
cdcsdk_publication_list_refresh_interval_secsで定義されたリフレッシュ間隔を待機します。オプションで、小さなバッファ・ウィンドウを使用して、CDCモジュールで表が完全にリフレッシュされるようにします。
-
リフレッシュ間隔の完了後にExtractプロセスを再起動します。
-
新しい表に対するDML操作を実行します。
-
Extractで新規レコードが正常に取得されることを確認します。
既存のExtractプロセスへの新規表の追加- 例
この例のシナリオを考えてみます。
1つの表に2つの構成済パブリケーションがあります。
-
パブリケーション1 (pub1): 特定の表
-
パブリケーション2 (pub2): すべての表
-
Two Extracts (Ext1 using pub1, Ext2 using pub2) with static table lists
-
静的表に対するDML操作は、両方のExtractによって取得されます。
次の例は、前述の考慮事項に基づいて、既存のExtractプロセスに新しい表を追加するステップを示しています。
-
Ext1およびExt2を停止します。
-
新しい表(table2、table3)を作成します。
-
Ext1およびExt2の抽出パラメータ・ファイルを更新します。
-
pub1を変更して、新しい表を含めます。Pub2は変更を必要としません。
-
Ext1およびExt2を再起動します。
-
リフレッシュ間隔(
cdcsdk_publication_list_refresh_interval_secs)を待機します。 -
新しい表に対してDML操作を実行し、両方のExtractで正常に取得されたことを確認します。
Extractプロセスからの表の削除
表を削除する際には、次の2つのシナリオを考慮する必要があります。
表は公開の一部です
表がパブリケーションに含まれている場合、表の削除は許可されません。このシナリオで表を削除しようとすると、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プロセスを停止します。これにより、Extractの異常終了が防止されます。
-
次のコマンドを使用して、パブリケーションに含まれる表に列を追加します。
ALTER TABLE...ADD COLUMN -
cdcsdk_publication_list_refresh_interval_secsで指定された期間を待って、CDCモジュールがリフレッシュされ、新しい列が認識されるようにします。 -
新しい列に対してDML操作(INSERTS、UPDATESまたはDELETES)を実行します。
-
Extractプロセスを再起動し、新しい列に対するDML操作を含む変更が正常に取得されたことを確認します。
列のドロップ
パブリケーションの一部である表から列を削除するには: 1。Extractプロセスを停止します。通常、列を削除してもExtractは異常終了しませんが、スキーマを変更する前にExtractを停止することをお薦めします。
-
パブリケーションに含まれるテーブルで次のコマンドを実行します。
ALTER TABLE ... DROP COLUMN -
cdcsdk_publication_list_refresh_interval_secsで指定された期間を待って、CDCモジュールが更新されていることを確認します。 -
必要に応じて、DML操作(INSERT、UPDATE、DELETE)を実行します。
-
Extractを再起動し、残りの列に対するDML操作が引き続き正しく取得されていることを確認します。