2 Oracle GoldenGateシステムの準備

この章では、DB2 LUWでOracle GoldenGateを実行する環境を準備する方法について説明します。

内容は次のとおりです。

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

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

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

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

  • 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. 
    

アーカイブ・パスの指定

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

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

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

処理のための表の準備

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

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

ターゲット表のトリガー、カスケード削除制約、カスケード更新制約を無効にするか、これらを変更して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で削除されているため、見つかりません。

行識別子の割当て

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

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

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

  1. 主キー

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

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

注意:

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

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

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

キー変更の防止

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

変更の取得の有効化

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でユーザー・ログインを指定します。
    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; 
    

例2-1 LONGVARロギングを除外する手順:

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

ADD TRANDATA owner.table, EXCLUDELONG 

注意:

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

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

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

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

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

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

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

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

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

初期抽出の準備

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のインスタンス化を参照してください。

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

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

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

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

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