5 Oracle GoldenGateシステムの準備

この章では、Oracle GoldenGateをサポートするためのDB2 for iシステムの準備に関するガイドラインを示します。

内容は次のとおりです。

Extractによるデータ取得のためのジャーナルの準備

データの取得対象の表はすべて、明示的に、あるいはデフォルトである同じライブラリ内のQSQJRNジャーナルを使用して、ジャーナル処理される必要があります。データの整合性を保つには、システムに出現した時間順にデータ・ジャーナル・エントリをExtractプロセスに送信する必要があります。この項では、Extractプロセスによる取得をサポートするようジャーナルを構成するためのガイドラインを示します。

Extractグループへのジャーナルの割当て

1つのExtractプロセスで、単一のジャーナルを処理できます。それより多くのジャーナルを使用する場合、追加のExtractプロセスを使用して超過分のジャーナルを処理します。必要に応じて、追加のExtractプロセスを使用して取得のパフォーマンスを向上させることもできます。

ノート:

トランザクションの整合性を保証するには、特定のトランザクションに対応するすべてのオブジェクトを同一のExtractグループで読み取る必要があります。複数のExtractプロセスの使用の詳細は、『Oracle GoldenGateの管理』Oracle GoldenGateのパフォーマンスのチューニングに関する項を参照してください。

ジャーナル・パラメータの設定

Extractプロセスによるデータの取得をサポートするには、少なくとも次のジャーナル・パラメータの設定が必要です。

  • レシーバの管理(MNGRCV): *SYSTEM

  • レシーバの削除(DLTRCV): *NO

  • 受信者サイズ・オプション(RCVSIZOPT): *MAXOPT2 (*MAXOPT2を使用するとジャーナル順序番号が足りなくなる場合は、ETROLLOVERALTER EXTRACTを実行する必要がないように、*MAXOPT3が推奨されます。)

  • ジャーナルの状態(JRNSTATE): *ACTIVE

  • 項目固有のデータの最小化(MINENTDTA): *NONE

  • 固定長データ(FIXLENDTA): *USR

次の例に、これらの属性をライブラリLIB1のジャーナルJRN1に設定するコマンドを示します。

CHGJRN JRN(LIB1/JRN1) MNGRCV(*SYSTEM) DLTRCV(*NO) RCVSIZOPT(*MAXOPT3) JRNSTATE(*ACTIVE) MINENTDTA(*NONE) FIXLENDTA(*USR)

ノート:

ジャーナルの属性を確認するには、コマンドWRKJRNA JRN(LIB1/JRN1) DETAIL(*CURATR)を使用します。

ジャーナルのパラメータが、推奨された設定値に設定されている場合、ジャーナルの項目に、Oracle GoldenGateの処理が行われるのに必要な情報がすべて含まれることが保証されます。これらの設定で、システムによって、ジャーナル・レシーバが自動的に削除されず、Extractが古いデータを処理する必要が生じた場合に備えて保持されることも保証されます。

ジャーナル・レシーバの削除

Extractのお薦めの構成ではDLTRCVパラメータはNOに設定されますが(ジャーナル・パラメータの設定を参照)、Extractによる取得の完了後に古いジャーナル・レシーバを削除できます。

Oracle GoldenGateが読み取るジャーナルを使用する別のアプリケーションを使用している場合は、設定可能なジャーナル・レシーバの自動クリーンアップに関して考慮する必要があります。Oracle GoldenGateは、ジャーナル・レシーバがデタッチまたは削除される前に読み取ることができる必要があります。

ジャーナル・レシーバを削除する手順

  1. GGSCIを実行します。
  2. GGSCIで次のコマンドを発行し、Extractが現在の処理位置としているジャーナルの位置とそのジャーナル・レシーバを確認します。
    INFO EXTRACT group
    
  3. 次のDB2 for iコマンドを使用して、INFO EXTRACTコマンドで表示されたジャーナル・レシーバより前に生成されたジャーナル・レシーバを削除します。
    DLTJRNRCV JRNRCV(library/journal_receiver)
    

    説明:

    libraryおよびjournal_receiverは、ライブラリおよび削除するジャーナル・レシーバの実際の名前です。このコマンドの詳細は、DB2 for iインフォメーション・センターを参照してください。

オブジェクト名の指定

Oracle GoldenGateのコマンドおよびパラメータでは、SQL名形式、library_name/file_name(member_name)の形式のネイティブ名、両者の混在がサポートされます。ネイティブ・ファイル・システム名にメンバー名が含まれない場合、すべてのメンバーがOracle GoldenGateプロセスによって暗黙的に選択されます。SQL名の場合は、最初のメンバーのみが使用されます。

二重引用符で囲まれたオブジェクト名の大/小文字の区別をサポートするには、Oracle GoldenGateパラメータ・ファイルでそれらの名前を二重引用符で囲んで指定します。これは、SQL名でもネイティブ・ファイル・システム名でも同様です。

DB2 for i以外のプラットフォームでMAP文にネイティブ表名を指定するときは、Oracle GoldenGateがセパレータ文字として正しく解釈するように、名前を二重引用符で囲む必要があります。

他のOracle GoldenGateの管理ドキュメントやリファレンス内の用語との一貫性を保つため、ここに示すように、SQLの用語「スキーマ」および「表」をDB2 for iデータのコンテナの意で使用します。

表5-1 ネイティブとSQLのオブジェクト名の関係

ネイティブ SQL ノート

ライブラリ

(最大長10)

スキーマ

(最大長128)

オペレーティング・システムによって、SQLで作成されたスキーマに対応するネイティブ名が作成されます。

ファイル

(最大長10)

(最大長128)

オペレーティング・システムによって、SQLで作成された表に対応するネイティブ名が作成されます。

メンバー

適用外

実際のデータが含まれます。FILEオブジェクトの最初メンバーのみがSQLを介してアクセスされます。他のメンバーのデータにアクセスするには、ネイティブ・システム名を使用する必要があります。

処理のための表の準備

次の表属性は、Oracle GoldenGate環境で処理する必要があります。

表における行の一意性の保証

Oracle GoldenGateでは、レプリケートされた更新および削除に対して正しいターゲット行を見つけるために、ソース表とターゲット表にある形式の一意の行識別子が必要です。

TABLEまたはMAP文でKEYCOLS句が使用されないかぎり、Oracle GoldenGateは、使用する行識別子を次の優先順位に従って選択します。
  1. 主キー

  2. タイムスタンプまたはマテリアライズされていない計算結果列を含まない英数字順で最初の一意キー。

  3. 前述のキー・タイプのいずれも存在しない場合(その他の種類のキーが表に定義されている場合でも)、Oracle GoldenGateは、データベースで一意キーでの使用を許可されているすべての列(キー内での使用がOracle GoldenGateでサポートされていない列やOracle GoldenGate構成から除外されている列は除く)で疑似キーを作成します。

    ノート:

    表に使用可能な他のキーがない場合や、表にキーがまったくない場合、Oracle GoldenGateは該当するメッセージをレポート・ファイルに記録します。すべての列からキーを作成すると、ソース・システムのOracle GoldenGateのパフォーマンスが低下します。ターゲットでは、このキーはReplicatであまり効率的でないより大きいWHERE句が使用される原因となります。
  4. 表に適切なキーがない場合、あるいは既存のキーを使用しない場合は、表に一意の値が常に含まれる列があれば、代替キーを定義できます。ExtractのTABLEパラメータおよびReplicatのMAPパラメータ内にKEYCOLS句を含めることで、この代替キーを定義します。指定したキーにより、Oracle GoldenGateで検出される既存の主キーまたは一意キーはオーバーライドされます。Oracle GoldenGateリファレンスTABLE | MAPを参照してください。

KEYCOLSを使用したカスタム・キーの指定

前述のキー・タイプの行識別子が表に存在しないか、または、それらの識別子を使用しない場合は、常に一意の値が含まれている列が表にあれば、代替キーを定義できます。ExtractのTABLEパラメータおよびReplicatのMAPパラメータ内にKEYCOLS句を含めることで、この代替キーを定義します。指定したキーにより、Oracle GoldenGateで検出される既存の主キーまたは一意キーはオーバーライドされます。

キー変更の防止

Oracle GoldenGateがジャーナル・データの処理を開始した後に、Extractによって表の行識別子として使用されるキー(主キー、一意キー、KEYCOLSキーまたはすべての列キー)に列を追加する必要がある場合、次のステップに従って変更します。

  1. Extractを停止します。
    STOP EXTRACT group
    
  2. 既存のジャーナル・データがすべて処理されたことを表すEOFが返されるまで、次のコマンドを発行します。
    INFO EXTRACT group
    
  3. キーに変更を加えます。
  4. Extractを起動します。
    START EXTRACT group

ターゲットでの制約の無効化

ターゲット表で、トリガーおよびカスケード制約を無効にするか、Replicatによる変更を無視するよう構成する必要があります。Oracle GoldenGateでは、トリガーまたはカスケード制約によって生じたDMLがレプリケートされるため、制約を無効にする必要があります。同じトリガーや制約がターゲット表でアクティブになった場合、レプリケートされたバージョンのために重複となり、データベースでエラーが返されます。ソース表にemp_srcsalary_src、ターゲット表にemp_targsalary_targを使用している次の例について考えます。

  1. emp_srcに削除が発行されます。
  2. それによって、削除がsalary_srcにカスケードされます。
  3. Oracle GoldenGateが、両方の削除をターゲットに送信します。
  4. 親削除が最初に到達し、emp_targに適用されます。
  5. 親削除によって、削除がsalary_targにカスケードされます。
  6. salary_srcのカスケードされた削除が、salary_targに適用されます。
  7. 行は、すでにステップ5で削除されているため、見つかりません。

変更の取得の有効化

表に対する変更をジャーナルに取得するには、OS/400コマンドラインでSTRJRNPFコマンドを実行するか、GGSCIからADD TRANDATAコマンドを実行します。ADD TRANDATAコマンドはSTRJRNPFを呼び出す、表のジャーナル処理を開始する推奨メソッドです。STRJRNPFコマンドでRecord Images (IMAGES): *BOTHの必要なジャーナル・イメージ属性が確実に設定されるためです。

ADD TRANDATAを実行する手順

  1. ソース・システムでGGSCIを実行します。
  2. DBLOGINコマンドを発行します。
    DBLOGIN SOURCEDB database USERID user, PASSWORD password [encryption_options]

    説明: SOURCEDBではデフォルトのDB 2 for iデータベースを、USERIDでは、Extractユーザー・プロファイルを、PASSWORDではそのプロファイルのパスワードを指定します。

  3. ADD TRANDATAコマンドを発行します。
    ADD TRANDATA table_specification

    説明: table_specificationは次のいずれかです。

デフォルト・ジャーナルの指定

ADD TRANDATAコマンドで複数の表またはファイルに対してデフォルト・ジャーナルを指定するには、JOURNALキーワードを指定するかわりに、ADD TRANDATAを発行する前に次のGGSCIコマンドを使用します。

DEFAULTJOURNAL library/journal 

ジャーナルを指定せずに使用されたADD TRANDATAでは、DEFAULTJOURNALのジャーナルが想定されます。

DEFAULTJOURNALの現在の設定を表示するには、引数なしでコマンドを発行します。

デフォルト・ジャーナルの指定の削除

デフォルト・ジャーナルの使用を削除するには、次のGGSCIコマンドを使用します。

DEFAULTJOURNAL CLEAR

マテリアライズ問合せ表の維持

ソースとターゲットのマテリアライズ問合せ表(MQT)間の同等性を維持するには、ベース表をレプリケートしますが、MQTはレプリケートしません。ターゲット・データベースでは、Replicatがベース表に適用する変更に基づいてMQTが整備されます。

これらの表を構成するためのルールを次に示します。

  • ベース表をTABLEおよびMAP文に含めます。

  • MQTはTABLEおよびMAP文に含めないでください。

  • MQT名が通常の表名とともに解決される可能性はありますが、TABLEおよびMAP文でワイルドカードを使用できます。Oracle GoldenGateは、ワイルドカードを使用した表リストからMQTを自動的に除外します。ただし、ExtractのTABLE文でMQTを名前によって明示的にリストすると、Extractが異常終了する原因となります。

システム・クロックの調整

システム・クロックをUTC(協定世界時)時間に設定し、DB2 for iシステム値でタイムゾーン・オフセットを使用して正しいローカル時間を表すことをお薦めします。この設定が正しく行われている場合、レプリケーションに悪影響を及ぼすことなく、ローカルの夏時間の調整が自動的に行われます。