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がレプリケートされます。同じトリガーがターゲット表でアクティブになった場合、レプリケートされたバージョンのために重複となり、データベースでエラーが返されます。

カスケード制約に関する考慮事項

Oracle GoldenGateによって取得されたカスケード更新と削除はバイナリ・ログに記録されないため、取得されません。これは、MySQLとMariaDBの両方で有効です。たとえば、表間に親子関係がある親表でdelete文を実行すると、子表に対してカスケード削除(存在する場合)が行われますが、バイナリ・ログには記録されません。親表の削除または更新レコードのみがバイナリ・ログに記録され、Oracle GoldenGateによって取得されます。

詳細は、https://mariadb.com/kb/en/replication-and-foreign-keys/およびhttps://dev.mysql.com/doc/refman/8.0/en/innodb-and-mysql-replication.htmlを参照してください。

カスケード操作のレプリケーションを適切に処理するために、ソースでカスケード削除と更新を無効にし、子レコードを明示的に削除または更新するようにアプリケーションをコーディングしてから、親レコードを変更することをお薦めします。または、ターゲット親表にソース親表と同じカスケード制約が構成されていることを確認する必要がありますが、これにより、特に双方向レプリケーションの場合にソースとターゲットの間で同期が取れない状態が発生する可能性があります。

行識別子の割当て

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が異常終了する原因となります。

DB2 LUWのデータベース構成

  • Oracle GoldenGate Extractプロセスは、DB2 LUWソース・データベースのトランザクション・ログ・ファイルを読み取るため、管理APIのDB2READLOG関数を呼び出します。DB2READLOGの他に、Extractは他の少数のAPIルーチンを使用して、起動時にソース・データベースの構成をチェックします。

  • Oracle GoldenGate Replicatプロセスは、DB2 LUWターゲット・データベースでDB2CLIインタフェースを使用します。このインタフェースのインストール方法は、DB2のドキュメントを参照してください。

  • データベースがローカルで定義されているかぎり、Oracle GoldenGateがインストールされているサーバーとは別のサーバーにデータベースを配置できます。たとえば、次のようにデータベースmydbabc123にあるデータとともにローカルで使用できます:

    catalog tcpip node abc123 remote abc123.us.mycompany.com server 00000
    catalog db mydb as abc123 at node abc123 AUTHENTICATION server
  • DB2 Universal Databaseにはdb2trcと呼ばれる内部トレース機能があり、プロセス間通信リソース(IPC)を取得します(セマフォおよび共有メモリーの両方)。DB2のトレースが有効になっていなくても、オペレーティング・システムに対するsemget()呼出しを発行する場合があります。IPCリソースが取得されないことにより、これらの呼出しが失敗するため、DB2クライアントで次のコマンドを発行する必要があります。

    db2trc alloc 
  • ローカル・データベースを使用するDB2クライアントで最適なパフォーマンスを得るために、同じマシンにあるデータベースにOracle GoldenGateを接続するときには、TCP/IPではなくローカル・ノード・カタログを作成することをお薦めします。ローカル・ノードはIPCを使用するため、ソケットAPIを使用してローカル・データベースにアクセスするTCP/IPノードよりかなり高速になります。

DB2 LUWのOracle GoldenGateプロセス用データベース・ユーザー

  • Oracle GoldenGate専用のデータベース・ユーザーを作成します。データベースに接続する必要のあるすべてのOracle GoldenGateプロセスに対して同じユーザーでもかまいません。

    • Extract (ソース・データベース)

    • Replicat (ターゲット・データベース)

    • DEFGEN (ソース・データベースまたはターゲット・データベース)

  • データのセキュリティを維持したり、Oracle GoldenGateの処理を的確に監視したりするには、他のユーザー、アプリケーションまたはプロセスに対してOracle GoldenGateデータベース・ユーザーでのログインまたは操作を許可しないでください。Oracle GoldenGate資格証明ストアにログイン資格証明を格納することをお薦めします。資格証明ストアはログイン名およびパスワードにローカルのセキュアなストレージを利用し、Oracle GoldenGateのパラメータ・ファイルにある別名のみを指定することを許可します。

  • システム管理者(SYSADM)またはデータベース管理者(DBADM)権限を、Extractを実行するデータベース・ユーザーに割り当てます。ExtractユーザーにDBADMを付与するには、SYSADM権限を持つユーザーが次のGRANT文を発行します。

    GRANT DBADM ON DATABASE TO USER user
    

    この権限は、DB2 Control CenterのUser and Group Objectsフォルダからも付与できます。Oracle GoldenGateプロセスに割り当てられているユーザーのデータベース・タブでは、「Database Administrative Authority」ボックスが選択されている必要があります。

    ノート:

    Extractユーザーに必要な権限がない場合、Extractは次のエラーを記録して停止します。

    [SC=-1224:SQL1224N A database agent could not be started to 
    service a request, or was terminated as a result of a database 
    system shutdown or a force command. 
    SQL STATE 55032: The CONNECT statement is invalid, because the 
    database manager was stopped after this application was started]
    
  • Replicatを実行しているデータベース・ユーザーに少なくとも次の権限を付与します。

    • ターゲット・データベースに対するローカルのCONNECT

    • システム・カタログ・ビューに対するSELECT

    • ターゲット表に対するSELECTINSERTUPDATEおよびDELETE

セッション文字セットの設定

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

初期抽出の準備

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

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

  • 特定のLRI値

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

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

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

トランザクションの部分的な取得を避けるには、データベースが一時停止状態になっている時点でExtractプロセスを初期化します。DB2 LUWでは、このような目的のために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を参照してください。