2 Oracle GoldenGateシステムの準備
内容は次のとおりです。
2.1 Oracle GoldenGateのためのトランザクション・ログの構成
DML操作を取得するために、Oracle GoldenGateはデフォルトでDB2 LUWのオンライン・ログを読み取ります。ただし、オンライン・ログが使用可能でない場合は、アーカイブ・ログを読み取ります。Oracle GoldenGateの処理の継続性と整合性を確実にするために、ログを次のように構成します。
2.1.1 トランザクション・ログの保持
データベースのバージョンに応じて次のパラメータ・セットのいずれかを有効にすることで、ロールフォワード・リカバリ用にトランザクション・ログを保持するようにデータベースを構成します。
-
DB2 LUW 9.5以上:
LOGARCHMETH
パラメータを次のように設定します。-
LOGARCHMETH1
をLOGRETAIN
に設定します。 -
LOGARCHMETH2
をOFF
に設定します。
また、フォワード・リカバリが有効であるかぎり、他の
LOGARCHMETH
オプションを使用できます。たとえば、次のものは有効です。-
LOGARCHMETH1
をDISK
に設定します。 -
LOGARCHMETH2
をTSM
に設定します。
-
ログ保存パラメータを判別する手順:
-
データベースに接続します。
db2 connect to
database
userusername
usingpassword
-
データベース名を取得します。
db2 list db directory
-
データベースのデータベース構成を取得します。
db2 get db cfg for
database
確認するフィールドは次のとおりです。
Log retain for recovery status = RECOVERY User exit for logging status = YES
ログ保存パラメータを設定する手順:
2.1.2 アーカイブ・パスの指定
DB2 LUWのOVERFLOWLOGPATH
パラメータをアーカイブ・ログ・ディレクトリに設定します。ノードは、指定したパス変数に自動的にアタッチされます。
db2 connect todatabase
db2 update db cfg using overflowlogpath "path
"
ノード自体をパスから除外します。たとえば、アーカイブ・ログ・ディレクトリへのフルパスが/sdb2logarch/oltpods1/archive/OLTPODS1/NODE0000
である場合、OVERFLOWLOGPATH
値は、/sdb2logarch/oltpods1/archive/OLTPODS1
として指定します。
2.2 処理のための表の準備
次の表属性は、Oracle GoldenGate環境で処理する必要があります。
2.2.1 トリガーおよびカスケード制約の無効化
ターゲット表のトリガー、カスケード削除制約、カスケード更新制約を無効にするか、これらを変更してOracle GoldenGateデータベース・ユーザーによる変更が無視されるようにします。Oracle GoldenGateでは、トリガーまたはカスケード制約の結果として生成されるDMLがレプリケートされます。同じトリガーや制約がターゲット表でアクティブになった場合、レプリケートされたバージョンのために重複となり、データベースでエラーが返されます。ソース表にemp_src
とsalary_src
、ターゲット表にemp_targ
とsalary_targ
を使用している次の例について考えます。
-
emp_src
に対して削除が発行されます。 -
それによって、削除が
salary_src
にカスケードされます。 -
Oracle GoldenGateが、両方の削除をターゲットに送信します。
-
まず親削除が到着し、
emp_targ
に適用されます。 -
親削除によって、削除が
salary_targ
にカスケードされます。 -
salary_src
のカスケードされた削除が、salary_targ
に適用されます。 -
行は、すでにステップ5で削除されているため、見つかりません。
親トピック: 処理のための表の準備
2.2.2 行識別子の割当て
Oracle GoldenGateでは、レプリケートされた更新および削除に対して正しいターゲット行を見つけるために、ソース表とターゲット表にある形式の一意の行識別子が必要です。
2.2.2.1 Oracle GoldenGateで使用する行識別子の種類を判別する方法
TABLE
またはMAP
文でKEYCOLS
句が使用されないかぎり、Oracle GoldenGateは、使用する行識別子を次の優先順位に従って選択します。
-
主キー
-
タイムスタンプまたはマテリアライズされていない計算結果列を含まない英数字順で最初の一意キー。
-
前述のキー・タイプのいずれも存在しない場合(その他の種類のキーが表に定義されている場合でも)、Oracle GoldenGateは、データベースで一意キーでの使用を許可されているすべての列(キー内での使用がOracle GoldenGateでサポートされていない列やOracle GoldenGate構成から除外されている列は除く)で疑似キーを作成します。
注意:
表に使用可能な他のキーがない場合や、表にキーがまったくない場合、Oracle GoldenGateは該当するメッセージをレポート・ファイルに記録します。すべての列からキーを作成すると、ソース・システムのOracle GoldenGateのパフォーマンスが低下します。ターゲットでは、このキーはReplicatであまり効率的でないより大きいWHERE
句が使用される原因となります。
親トピック: 行識別子の割当て
2.2.2.2 KEYCOLS
を使用したカスタム・キーの指定
前述のキー・タイプの行識別子が表に存在しないか、または、それらの識別子を使用しない場合は、常に一意の値が含まれている列が表にあれば、代替キーを定義できます。ExtractのTABLE
パラメータおよびReplicatのMAP
パラメータ内にKEYCOLS
句を含めることで、この代替キーを定義します。指定したキーにより、Oracle GoldenGateで検出される既存の主キーまたは一意キーはオーバーライドされます。
親トピック: 行識別子の割当て
2.2.3 キー変更の防止
Oracle GoldenGateで表のデータの抽出が開始された後で、キーに列を追加しないでください。このルールは、主キー、一意キー、KEYCOLS
キー、またはすべての列キーに適用されます。DB2 LUWでは、表に追加される列の変更前イメージは提供されません。ソースでキー内の列が更新された場合、Oracle GoldenGateでは更新のレプリケートの際、ターゲット表の現在の値と比較するために変更前イメージが必要になります。
親トピック: 処理のための表の準備
2.2.4 変更の取得の有効化
CREATE TABLE
およびALTER TABLE
コマンドのDATA CAPTURE CHANGES
機能で提供される拡張形式でデータの変更が記録されるよう、DB2を構成します。この形式により、Oracle GoldenGateでは、UPDATE文によって変更された行の変更前イメージと変更後イメージの全体を使用できます。GGSCIを使用して、次のようにALTER TABLE
コマンドを発行できます。
GGSCIからの変更の取得を有効にする手順:
例2-1 LONGVAR
ロギングを除外する手順:
ALTER TABLE
コマンドからINCLUDE LONGVAR COLUMNS
句を省略するには、EXCLUDELONG
オプション付きでADD TRANDATA
を使用します。
ADD TRANDATA owner.table
, EXCLUDELONG
注意:
LONGVAR
列をロギングから除外した場合、変更前イメージを必要とするOracle GoldenGateの機能(GETUPDATEBEFORES
、NOCOMPRESSUPDATES
およびNOCOMPRESSDELETES
パラメータなど)では、表にこれらの列が含まれているとエラーが返される場合があります。回避策については、TRANLOGOPTIONS
パラメータのREQUIRELONGDATACAPTURECHANGES
| NOREQUIRELONGDATACAPTURECHANGES
オプションを参照してください。
親トピック: 処理のための表の準備
2.2.5 マテリアライズ問合せ表の維持
ソースとターゲットのマテリアライズ問合せ表(MQT)間の同等性を維持するには、ベース表をレプリケートしますが、MQTはレプリケートしません。ターゲット・データベースでは、Replicatがベース表に適用する変更に基づいてMQTが整備されます。
これらの表を構成するためのルールを次に示します。
-
ベース表を
TABLE
およびMAP
文に含めます。 -
MQTは
TABLE
およびMAP
文に含めないでください。 -
MQT名が通常の表名とともに解決される可能性はありますが、
TABLE
およびMAP
文でワイルドカードを使用できます。Oracle GoldenGateは、ワイルドカードを使用した表リストからMQTを自動的に除外します。ただし、ExtractのTABLE
文でMQTを名前によって明示的にリストすると、Extractが異常終了する原因となります。
親トピック: 処理のための表の準備
2.3 セッション・キャラクタ・セットの設定
ソースおよびターゲット・データベース間のキャラクタ・セットの変換をサポートするには、セッション・キャラクタ・セットがデータベース・キャラクタ・セットと同じであることを確認します。DB2CODEPAGE
環境変数を使用してセッション・キャラクタ・セットを設定できます。
親トピック: Oracle GoldenGateシステムの準備
2.4 初期抽出の準備
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のインスタンス化を参照してください。
親トピック: Oracle GoldenGateシステムの準備
2.5 パラメータ・ファイルでのDB2 LUWデータベースの指定
Oracle GoldenGateプロセスを正しいDB2 LUWデータベースに接続するには、次のパラメータでDB2 LUWデータベースの名前(別名ではなく)を指定する必要があります。
-
Extractのパラメータ
SOURCEDB
でDB2ソース・データベースを指定します。 -
Replicatのパラメータ
TARGETDB
でDB2ターゲット・データベース名を指定します。
これらのパラメータの詳細は、Oracle GoldenGate Oracle GoldenGateリファレンスfor Windows and UNIXを参照してください。
親トピック: Oracle GoldenGateシステムの準備