プライマリ・コンテンツに移動
Oracle® Fusion Middleware DB2 LUWのためのOracle GoldenGateのインストールおよび構成
12c (12.2.0.1)
E70110-01
  目次へ移動
目次

前
 
次
 

3 Oracle GoldenGateのためのシステムの準備

この章では、Oracle GoldenGateのためにシステムを準備する方法について説明します。

この章の内容は次のとおりです。

3.1 Oracle GoldenGateのためのトランザクション・ログの構成

DML操作を取得するため、Oracle GoldenGateではデフォルトでDB2 for LUWオンライン・ログを読み取りますが、オンライン・ログを使用できない場合は、アーカイブ・ログを読み取ります。Oracle GoldenGateの処理の継続性と整合性を確実にするため、ログを次のように構成します。

3.1.1 トランザクション・ログの保持

データベースのバージョンに応じて次のパラメータ・セットのいずれかを有効にすることで、ロールフォワード・リカバリ用にトランザクション・ログを保持するようにデータベースを構成します。

  • DB2 LUW 9.5以上:

    LOGARCHMETHパラメータを次のように設定します。

    • LOGARCHMETH1LOGRETAINに設定します。

    • LOGARCHMETH2OFFに設定します。

    また、フォワード・リカバリが有効であるかぎり、他のLOGARCHMETHオプションを使用できます。たとえば、次のものは有効です。

    • LOGARCHMETH1DISKに設定します。

    • LOGARCHMETH2TSMに設定します。

ログ保存パラメータを判別する手順:

  1. データベースに接続します。

    db2 connect to database user username using password 
    
  2. データベース名を取得します。

    db2 list db directory 
    
  3. データベースのデータベース構成を取得します。

    db2 get db cfg for database 
    

    確認するフィールドは次のとおりです。

    Log retain for recovery status = RECOVERY 
    User exit for logging status = YES 
    

ログ保存パラメータを設定する手順:

  1. 次のコマンドのいずれかを発行します。

    USEREXITを有効にする場合は、次を使用します。

    db2 update db cfg for database using USEREXIT ON 
    

    USEREXITを使用しない場合は、このコマンドを使用します。

    db2 update db cfg for database using LOGRETAIN RECOVERY 
    

    LOGARCHMETHを設定するには、次のようにします。

    db2 update db cfg for database using LOGARCHMETH1 LOGRETAIN 
    db2 update db cfg for database using LOGARCHMETH2 OFF 
    
  2. 次のコマンドを発行して、データベースの完全バックアップを作成します。

    db2 backup db database to device
    
  3. DB2 LUWがアクセス権を持つディレクトリにバックアップを配置します。次のメッセージが表示された場合は、システム管理者に連絡してください。

    SQL2061N An attempt to access media "device" is denied. 
    

3.1.2 アーカイブ・パスの指定

DB2のOVERFLOWLOGPATHパラメータをアーカイブ・ログ・ディレクトリに設定します。ノードは、指定したパス変数に自動的にアタッチされます。

db2 connect to database
db2 update db cfg using overflowlogpath "path" 

ノード自体をパスから除外します。たとえば、アーカイブ・ログ・ディレクトリへのフルパスが/sdb2logarch/oltpods1/archive/OLTPODS1/NODE0000である場合、OVERFLOWLOGPATH値は、/sdb2logarch/oltpods1/archive/OLTPODS1として指定します。

3.2 処理のための表の準備

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

3.2.1 トリガーおよびカスケード制約の無効化

ターゲット表のトリガー、カスケード削除制約、カスケード更新制約を無効にするか、これらを変更してOracle GoldenGateデータベース・ユーザーによる変更が無視されるようにします。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ですでに削除されているため検出できません。

3.2.2 行識別子の割当て

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

3.2.2.1 Oracle GoldenGateで使用する行識別子の種類を判別する方法

TABLE文またはMAP文でKEYCOLS句が使用されている場合を除き、Oracle GoldenGateでは次の優先順序で、使用する行識別子が選択されます。

  1. 主キー

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

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


    注意:

    表にその他の使用できないキーがある場合や、表にキーが存在しない場合、Oracle GoldenGateにより、該当するメッセージがレポート・ファイルに記録されます。すべての列からキーを作成すると、ソース・システム上のOracle GoldenGateのパフォーマンスが低下します。このキーのために、ターゲットのReplicatでは、より大きく非効率なWHERE句が使用されることになります。

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

表に前述のタイプの行識別子のいずれかがない場合や、それらの識別子を使用しないほうが適切な場合、表に常に一意の値を含む列があるときは、代替キーを定義できます。この代替キーは、ExtractのTABLEパラメータおよびReplicatのMAPパラメータにKEYCOLS句を指定して定義します。指定したキーにより、Oracle GoldenGateで検出される既存の主キーまたは一意キーはオーバーライドされます。詳細は、Oracle GoldenGate Oracle GoldenGateリファレンスfor Windows and UNIXを参照してください。

3.2.3 キー変更の防止

Oracle GoldenGateで表のデータの抽出が開始された後で、キーに列を追加しないでください。このルールは、主キー、一意キー、KEYCOLSキー、またはすべての列キーに適用されます。DB2 LUWでは、表に追加される列の変更前イメージは提供されません。ソースでキー内の列が更新された場合、Oracle GoldenGateでは更新のレプリケートの際、ターゲット表の現在の値と比較するために変更前イメージが必要になります。

3.2.4 変更の取得の有効化

CREATE TABLEおよびALTER TABLEコマンドのDATA CAPTURE CHANGES機能で提供される拡張形式でデータの変更が記録されるよう、DB2を構成します。この形式により、Oracle GoldenGateでは、UPDATE文によって変更された行の変更前イメージと変更後イメージの全体を使用できます。GGSCIを使用して、次のようにALTER TABLEコマンドを発行できます。

GGSCIからの変更の取得を有効にする手順:

  1. Oracle GoldenGateディレクトリからGGSCIを実行します。

  2. ALTER TABLE権限を持つユーザーとしてGGSCIからDB2にログオンします。SOURCEDBでデータソース名を、USERIDおよびPASSWORDでユーザー・ログインを指定します。必要に応じて、暗号化オプションについてOracle GoldenGate Oracle GoldenGateリファレンスfor Windows and UNIXを参照してください。

    DBLOGIN SOURCEDB dsn, USERID user[, PASSWORD password] 
    
  3. 次のコマンドを発行します。owner.tableは表の完全修飾名です。ワイルドカードを使用して複数の表の名前を指定できます。DB2 LUWではアスタリスク(*)ワイルドカードのみサポートされます。

    ADD TRANDATA owner.table
    

    ADD TRANDATAにより次のコマンドが発行されます。これには、LONGVAR列の変更前イメージのロギングが含まれます:

    ALTER TABLE name DATA CAPTURE CHANGES INCLUDE LONGVAR COLUMNS; 
    

LONGVARロギングを除外する手順:

ALTER TABLEコマンドからINCLUDE LONGVAR COLUMNS句を省略するには、EXCLUDELONGオプション付きでADD TRANDATAを使用します。

ADD TRANDATA owner.table, EXCLUDELONG 

注意:

LONGVAR列をロギングから除外した場合、変更前イメージを必要とするOracle GoldenGateの機能(GETUPDATEBEFORESNOCOMPRESSUPDATESおよびNOCOMPRESSDELETESパラメータなど)では、表にこれらの列が含まれているとエラーが返される場合があります。回避策については、TRANLOGOPTIONSパラメータのREQUIRELONGDATACAPTURECHANGES | NOREQUIRELONGDATACAPTURECHANGESオプションを参照してください。

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

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

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

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

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

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

3.3 セッション・キャラクタ・セットの設定

ソースおよびターゲット・データベース間のキャラクタ・セットの変換をサポートするには、セッション・キャラクタ・セットがデータベース・キャラクタ・セットと同じであることを確認します。DB2CODEPAGE環境変数を使用してセッション・キャラクタ・セットを設定できます。

3.4 初期抽出の準備

Oracle GoldenGate環境の初期化の際、最初のデータ同期を行い、Oracle GoldenGateプロセスを初めて起動します。これらの手順とともに、プロセス・グループを作成します。Extractグループを作成するには、トランザクション・ログで最初の開始位置を確定する必要があります。この初期読取位置は、次のいずれかに基づくトランザクション境界上に置かれます。

  • トランザクション・ファイルの終わり

  • 特定のLSN値

開始ポイントは、ADD EXTRACTコマンドのBEGINオプションで指定します。

Extractを初めて起動すると、指定した開始ポイントの後に発生したすべてのトランザクション・データが取得されますが、開始ポイントよりに発生したデータは取得されません。このため、オープン・トランザクションが開始ポイントをまたがる場合、トランザクションの一部しか取得されないことがあります。

初期トランザクションの一貫性を確保する手順:

トランザクションの部分的な取得を避けるには、データベースが停止している時点でExtractプロセスを初期化します。DB2では、そのような目的でQUIESCEコマンドが提供されています。これがトランザクションの一貫性を確保する唯一の方法です。


注意:

Extractを初期化した後の再起動では、プロセスはリカバリ・チェックポイントを使用して最終読取り位置をマークするため、トランザクションの一部は抽出されません。

オープン・トランザクションを表示する手順:

IBMでは、DB2データベースおよびインスタンスを監視するためのdb2pdというユーティリティを提供しています。これを使用して、オープン・トランザクションに関する情報を表示したり、開始ポイントをまたぐトランザクションがないかを判別できます。ただし、DB2 LUWのログ・レコードにはタイムスタンプがないため、正確な判断はできません。可能な場合は、Oracle GoldenGateを初期化する前にデータベースを停止します。

Oracle GoldenGate環境の初期化の詳細は、Oracle GoldenGate Oracle GoldenGateの管理for Windows and UNIXを参照してください。

3.5 パラメータ・ファイルでのDB2 LUWデータベースの指定

Oracle GoldenGateプロセスを正しいDB2 LUWデータベースに接続するには、次のパラメータでDB2 LUWデータベースの名前(別名ではなく)を指定する必要があります。

  • ExtractのパラメータSOURCEDBでDB2ソース・データベースを指定します。

  • ReplicatのパラメータTARGETDBでDB2ターゲット・データベース名を指定します。

これらのパラメータの詳細は、Oracle GoldenGate Oracle GoldenGateリファレンスfor Windows and UNIXを参照してください。