※ 本記事は、Deniz Sendilによる”Handling DDL operations for Snowflake with OCI GoldenGate“を翻訳したものです。

2023年8月15日


数か月前に、OCI GoldenGateを使用して、Snowflakeへのリアルタイムのデータ・レプリケーションが可能になったことを発表しました。OCI GoldenGate Snowflakeのドキュメントとともに、ブログやビデオ録画を公開しました。次のリンクから確認できます。:

このリリース以来、多くの新しいお客様がリアルタイム・データ・レプリケーションをOCI GoldenGateのSnowflakeテーブルに適応させています。ユース・ケースが非常に短時間で成熟するにつれ、Snowflakeレプリケーション・プロセスをより詳細に制御したいお客様が見られました。Snowflakeレプリケーションについて話し合い始めると、DDLレプリケーションは最もホットなトピックの1つです。すでにご存知のように、OCI GoldenGate Snowflakeレプリケーションは、現在DDLレプリケーションをサポートしておらず、最も重要な項目の1つとしてロードマップ上にあります。

ただし、ターゲットのSnowflake表にDDL操作を手動で適用するレプリケーション・プロセスを制御できます。まず、デフォルトの動作について説明します。:

ソースDDLの場合のデフォルトのExtractおよびReplicatの動作:

Snowflakeレプリケーションが開始されると、ターゲット表からメタデータの静的スナップショットが解決されます。また、レプリケーション・マッピング機能では、ソースからの内容に関係なく、マッピングにターゲット・スキーマ情報が使用されます。そのため、抽出プロセスでソースDDL操作が取得された場合でも、Replicatはそれを無視し、replicatは失敗しません。Replicatは既存のフィールドをマップし、変更は無視されます。次の例を参照してください。:

ソースOracle表の初期状態:

Source Table

 

ターゲットSnowflake表の初期状態:

Target Table

ソースOracle表に列を追加:

Add Column

Oracle Extractを確認:

Extract

Extract

Snowflake replicatおよびターゲット表を確認:

Replicat

Target Table

このように、ソースOracleDBで実行された列の追加操作は、replicatでは無視され、replicatはまだ実行されています。

replicatがデフォルトで失敗しない理由は、replicatマッピングはターゲットSnowflakeスキーマによって駆動され、ターゲット表に存在する内容をマップするためです。利点は、replicatは失敗せず、既存のマッピングのレプリケーションを続行することです。たとえば、ソースOracle表のAGE列を99から59に更新すると、ターゲットの既存のAGE列が更新されます。前に追加した列は表示されませんが、ターゲットでAGE列が更新されます。

Target Table

一方、ユーザーはDDLに関する通知を受信せず、ユーザーはターゲット表を更新する必要があることを知りません。

抽出を異常終了してターゲットにDDLを適用:

現在、DDLレプリケーションを処理する最も最適な方法は、DDLの場合に抽出プロセスを異常終了することです。この設計では、ソースDDL操作の場合に抽出が失敗し、抽出を再開する前にターゲットDDLを適宜更新できます。

抽出でDDL操作を制御するには、DDLとEVENTACTIONSの2つのパラメータを一緒に使用します。DDLパラメータは、DDLレコードに基づく処理アクションの有効化、フィルタリングおよび構成に使用されます。EVENTACTIONSは、DDLレコードに基づいて定義されたアクションをトリガーします。

DDL INCLUDE ALL EVENTACTIONS (LOG INFO、 STOP)パラメータを抽出に追加します。ソース内のすべてのDDL操作が含まれ、ソースDDLの場合に抽出が停止されます。より複雑なルールを作成できます。たとえば、ソースDDLの場合は抽出が失敗し、切捨ての場合は失敗する場合があります。その場合は、同じパラメータでEXCLUDE OPTYEを使用できます。たとえば、DDL INCLUDE ALL EVENTACTIONS (REPORT、 STOP) EXCLUDE OPTYPE TRUNCATEです。

DDLOPTIONS REPORTをパラメータに追加して、DDL操作の詳細を抽出レポート・ファイルに記録することもできます。

要件に基づいてDDLパラメータを使用できます。詳細は、DDLパラメータのドキュメントを参照してください。

ソースOracle表の初期状態:

Source Table

抽出パラメータの更新:

Extract

ソースOracle表に列を追加:

Source Table

 

抽出を確認:

Extract

Report File

抽出が停止しました。この時点で、replicatを停止してターゲット・スノーフレーク表を更新し、replicatを再起動します。正確な順序に従う必要があります。

DDL適用後のターゲットSnowflake表の状態:

Target Table

Extractを開始し、次のことを確認:

ターゲットにDDLを適用した後、抽出を開始するだけで、変更は不要です。

Extract

Replicatを起動し、ターゲット表を確認:

Replicat

Target Table

まとめ:

OCIのGoldenGate ExtractおよびReplicatプロセスを構成して、ターゲットにDDLの変更を手動で適用できます。DDL動作を制御するために抽出で使用されるパラメータは、非常に柔軟に構成できます。ソースDDLの場合に抽出に失敗すると、ターゲットDDLを適用するためのユーザーの通知となります。また、このDDL処理設計では、ターゲットに変更を適用する際にデータ損失が保証されません。