3 DB2 LUWのためのOracle GoldenGateの構成
内容は次のとおりです。
この手順でできること
ここでは、次のプロセスの基本パラメータ(構成)ファイルを構成する方法を示します。
-
プライマリExtract(データ・ソースからトランザクション・データを取得)
-
データ・ポンプExtract(ローカル記憶域からターゲット・システムにデータを伝播)
-
Replicat(レプリケートされたデータをターゲット・データベースに適用)
ビジネス要件によってはより複雑なトポロジが必要ですが、この手順がその他の構成ステップの基礎となります。
ステップを実行することで、次のことが可能です。
-
基本的な構成ファイルが作成されます。
-
環境に適用する機能や要件を決定する際にパラメータを追加して、後から作成します。
-
コピーを使用して、一から作成するよりも短時間で追加パラメータ・ファイルを作成します。
詳細情報の入手先
次の詳細は、『Oracle GoldenGateの管理』および『Oracle GoldenGate環境の保護』を参照してください。
-
構成しているプロセスおよびファイル
-
詳細な構成情報
-
セキュリティ・オプション
-
データ統合オプション(フィルタリング、マッピング、変換)
-
複雑なトポロジの構成手順
-
レプリケーション環境の初期インスタンス化を実行するステップ
プライマリExtractの構成
次のステップでは、トランザクション・データをソースDB2 LUWから取得し、そのデータを一時的に保存するためにローカル証跡に書き込むようにプライマリExtractを構成します。
データ・ポンプExtractの構成
次のステップでは、ローカル証跡を読み取り、データをネットワーク経由でターゲット上のリモート証跡に送信するデータ・ポンプを構成します。データ・ポンプはオプションですが、使用することをお薦めします。
テンポラル表の作成
テンポラル表とは、表データの履歴と有効期間を管理する表です。Oracle GoldenGateでは、テンポラル表を使用して、表内で削除または更新される古い行すべてを管理します。テンポラル表は、その行やデータのビジネス有効期間を管理する場合にも使用されます。たとえば、Oracle GoldenGateでは行の有効期間を管理します。テンポラル表には、システム期間、アプリケーション期間、およびバイテンポラル表の3種類があります。
テンポラル表のサポート
-
システム期間テンポラル表とアプリケーション期間テンポラル表間のレプリケーションはサポートされていません。
-
非テンポラル表からテンポラル表へのレプリケーションはサポートされません。
-
INSERTALLRECORDS
パラメータを使用したテンポラル表のレプリケーションはサポートされていません。 -
双方向レプリケーションは、デフォルトのレプリケーションでのみサポートされます。
-
双方向レプリケーションでのCDRはサポートされていません。
-
アプリケーション期間テンポラル表でのCDRはサポートされています。
親トピック: テンポラル表の作成
テンポラル表を使用したレプリケーション
次のいずれかの方法を選択して、システム期間テンポラル表またはバイテンポラル表を次のようにレプリケートできます。
-
テンポラル表を別のテンポラル表にのみレプリケートします。これがデフォルトの動作です。
SYSTEM_TIME
期間列とトランザクションID列は適用側で自動生成される列なので、Oracle GoldenGateではレプリケートされません。データベース・マネージャは、システム・クロック時間とデフォルト値を使用して、ターゲット・テンポラル表の列に移入します。これらの列の元の値はそのまま使用して、次のいずれかを実行します。-
ターゲット・テンポラル表に追加のタイムスタンプ列を追加し、列を適切にマップします。追加の列は関連する履歴表に自動的に追加されます。
-
適用側で非テンポラル表を使用し、列を適切にマップします。このシナリオで、履歴表は管理できません。
-
ソースがDB2 LUWでターゲットが異なるデータベースの異種構成では、自動生成された列を無視することもできれば、適切な列変換関数を使用して列値をターゲット・データベースでサポートされている形式に変換し、その値をターゲット列に適切にマップすることもできます。
または
-
-
テンポラル表は関連する履歴表とともにテンポラル表と履歴表にそれぞれレプリケートできますが、その場合はレプリケート・パラメータ
DBOPTIONS SUPPRESSTEMPORALUPDATES
を指定する必要があります。キャプチャ対象のテンポラル表と履歴表の両方をExtractパラメータ・ファイルに指定する必要があります。Oracle GoldenGateでは、SYSTEM_TIME
期間列とトランザクションID列の値をレプリケートします。データベース・インスタンスに、適用側でストアド・プロシージャを実行する実行権限があることを確認する必要があります。
デフォルト・レプリケーションの使用中はSYSTEM_TIME
期間列とtransactionstart id
列が自動生成のままなので、Oracle GoldenGateで競合の検出や解決はできません。これらの列はset
句とwhere
句には指定できません。SUPPRESSTEMPORALUPDATES
パラメータを使用する場合、Oracle GoldenGateではCDRがサポートされます。
親トピック: テンポラル表の作成
変換
既存の表をテンポラル表に変換できますが、それにより表の構造が変更されます。この項では、表の構造がどのように変更されるかについて説明します。この項の各例では、次に示すサンプルの既存表を3種類すべてのテンポラル表に変換します。
Table policy_info ( Policy_id char[4] not null primary key, Coverage int not null ) And the tables contains the following initial rows POLICY_ID COVERAGE ------------- ----------- ABC 12000 DEF 13000 ERT 14000
- 例1 既存表をシステム期間テンポラル表に変換。
-
サンプルの既存表をシステム期間テンポラル表に変換するには、次のように
SYSTEM_PERIOD
列、transaction id
列およびSYSTEM_TIME
期間を追加します。ALTER TABLE policy_info ADD COLUMN sys_start TIMESTAMP(12) NOT NULL GENERATED ALWAYS AS ROW BEGIN; ALTER TABLE policy_info ADD COLUMN sys_end TIMESTAMP(12) NOT NULL GENERATED ALWAYS AS ROW END; ALTER TABLE policy_info ADD COLUMN ts_id TIMESTAMP(12) NOT NULL GENERATED ALWAYS AS TRANSACTION START ID; ALTER TABLE policy_info ADD PERIOD SYSTEM_TIME(sys_start, sys_end);
次に、次のいずれかの方法を使用して新しいテンポラル表の履歴表を作成します。
CREATE TABLE hist_policy_info ( policy_id CHAR(4) NOT NULL, coverage INT NOT NULL, sys_start TIMESTAMP(12) NOT NULL , sys_end TIMESTAMP(12) NOT NULL, ts_id TIMESTAMP(12) NOT NULL ); ALTER TABLE hist_policy_info ADD RESTRICT ON DROP;
CREATE TABLE hist_policy_info LIKE policy_info with RESTRICT ON DROP;
RESTRICT ON DROP
句を使用すると、システム期間テンポラル表の削除中に履歴表は削除できません。それ以外は、関連するテンポラル表の削除中に履歴表が暗黙的に削除されます。RESTRICT ON DROP
なしで履歴表を作成できます。履歴表は明示的には削除できません。履歴表の作成時には
GENERATED ALWAYS
句を使用しないようにしてください。また、ベース表の特定の行に対して多数の更新が行われ、それにより同じ主キーのセットで履歴表に何件もの挿入がトリガーされる場合があるため、システム期間テンポラル表の主キーもここでは適用されません。これ以外にも、履歴表の構造は関連するシステム期間テンポラル表とまったく同じであることが必要です。履歴表にはシステム期間テンポラル表と同数の列を同じ順序で設定する必要があります。履歴表の列は明示的に追加、削除または変更できません。次の文を使用して、システム期間テンポラル表をその履歴表と関連付ける必要があります。ALTER TABLE policy_info ADD VERSIONING USE HISTORY TABLE hist_policy_info.
表の
GENERATED ALWAYS
列は、常にデータベース・マネージャによって移入される列であり、ユーザーがこれらの列を制御することはできません。データベース・マネージャは、システム時間に基づいてこれらの列に移入します。既存の行では、追加された
SYSTEM_PERIOD
列とtransaction id
列に、次のようなデフォルト値が設定されます。POLICY_ID COVERAGE SYS_START SYS_END TS_ID --------- ----------- -------------------------------- -------------------------------- ------------------------------------------------------------------------------- ABC 12000 0001-01-01-00.00.00.000000000000 9999-12-30-00.00.00.000000000000 0001-01-01-00.00.00.000000000000 DEF 13000 0001-01-01-00.00.00.000000000000 9999-12-30-00.00.00.000000000000 0001-01-01-00.00.00.000000000000 ERT 14000 0001-01-01-00.00.00.000000000000 9999-12-30-00.00.00.000000000000 0001-01-01-00.00.00.000000000000
テンポラル表の更新を開始すると、関連する履歴表に変更前イメージが移入されます。
- 例2 既存表をアプリケーション期間テンポラル表に変換。
-
サンプルの既存表をアプリケーション期間テンポラル表に変換するには、次のように時間列および
BUSINESS_TIME
期間を追加します。ALTER TABLE policy_info ADD COLUMN bus_start DATE NOT NULL DEFAULT '10/10/2001'" ALTER TABLE policy_info ADD COLUMN bus_end DATE NOT NULL DEFAULT '10/10/2002' ALTER TABLE policy_info ADD PERIOD BUSINESS_TIME(bus_start, bus_end)
時間列を追加するときは、既存の時間列のビジネス有効期間の値を入力する際、
bus_start
列には必ずbus_end
よりも小さい値が設定されていることを確認する必要があります(これらの列が各行のビジネス有効期間を示すため)。新しいアプリケーション期間テンポラル表は次のように表示されます。
POLICY_ID COVERAGE BUS_START BUS_END --------- ----------- ---------- ------------------------------- ERT 14000 10/10/2001 10/10/2002 DEF 13000 10/10/2001 10/10/2002 ABC 12000 10/10/2001 10/10/2002
- 例3 既存表をバイテンポラル表に変換。
-
サンプルの既存表をバイテンポラル表に変換するには、次のように
SYSTEM_PERIOD
列、時間列をSYSTEM_TIME
期間およびBUSINESS_TIME
期間とともに追加します。ALTER TABLE policy_info ADD COLUMN sys_start TIMESTAMP(12) NOT NULL GENERATED ALWAYS AS ROW BEGIN; ALTER TABLE policy_info ADD COLUMN sys_end TIMESTAMP(12) NOT NULL GENERATED ALWAYS AS ROW END; ALTER TABLE policy_info ADD COLUMN ts_id TIMESTAMP(12) NOT NULL GENERATED ALWAYS AS TRANSACTION START ID; ALTER TABLE policy_info ADD PERIOD SYSTEM_TIME(sys_start, sys_end); ALTER TABLE policy_info ADD COLUMN bus_start DATE NOT NULL DEFAULT '10/10/2001'" ALTER TABLE policy_info ADD COLUMN bus_end DATE NOT NULL DEFAULT '10/10/2002' ALTER TABLE policy_info ADD PERIOD BUSINESS_TIME(bus_start, bus_end)
時間列を追加するときは、既存の時間列のビジネス有効期間の値を入力する際、
bus_start
列には必ずbus_end
よりも小さい値が設定されていることを確認する必要があります(これらの列が各行のビジネス有効期間を示すため)。次に、次のいずれかの方法を使用して新しいテンポラル表の履歴表を作成します。
CREATE TABLE hist_policy_info ( policy_id CHAR(4) NOT NULL, coverage INT NOT NULL, sys_start TIMESTAMP(12) NOT NULL , sys_end TIMESTAMP(12) NOT NULL, ts_id TIMESTAMP(12) NOT NULL ); ALTER TABLE hist_policy_info ADD RESTRICT ON DROP; CREATE TABLE hist_policy_info LIKE policy_info with RESTRICT ON DROP;
-
RESTRICT ON DROP
句を使用すると、システム期間テンポラル表の削除中に履歴表は削除できません。それ以外は、関連するテンポラル表の削除中に履歴表が暗黙的に削除されます。RESTRICT ON DROP
なしで履歴表を作成できます。履歴表は明示的には削除できません。履歴表の作成時には
GENERATED ALWAYS
句を使用しないようにしてください。また、ベース表の特定の行に対して多数の更新が行われ、それにより同じ主キーのセットで履歴表に何件もの挿入がトリガーされる場合があるため、システム期間テンポラル表の主キーもここでは適用されません。これ以外にも、履歴表の構造は関連するシステム期間テンポラル表とまったく同じであることが必要です。履歴表にはシステム期間テンポラル表と同数の列を同じ順序で設定する必要があります。履歴表の列は明示的に追加、削除または変更できません。次の文を使用して、システム期間テンポラル表をその履歴表と関連付ける必要があります。ALTER TABLE policy_info ADD VERSIONING USE HISTORY TABLE hist_policy_info.
表の
GENERATED ALWAYS
列は、常にデータベース・マネージャによって移入される列であり、ユーザーがこれらの列を制御することはできません。データベース・マネージャは、システム時間に基づいてこれらの列に移入します。既存の行では、追加された
SYSTEM_PERIOD
列とtransaction id
列に、次のようなデフォルト値が設定されます。POLICY_ID COVERAGE SYS_START SYS_END TS_ID --------- ----------- -------------------------------- -------------------------------- ------------------------------------------------------------------------------- ABC 12000 0001-01-01-00.00.00.000000000000 9999-12-30-00.00.00.000000000000 0001-01-01-00.00.00.000000000000 DEF 13000 0001-01-01-00.00.00.000000000000 9999-12-30-00.00.00.000000000000 0001-01-01-00.00.00.000000000000 ERT 14000 0001-01-01-00.00.00.000000000000 9999-12-30-00.00.00.000000000000 0001-01-01-00.00.00.000000000000
テンポラル表の更新を開始すると、関連する履歴表に変更前イメージが移入されます。
既存の行では、追加された
SYSTEM_TIME
期間、トランザクションIDおよび時間の各列に、次のようなデフォルト値が設定されます。POLICY_ID COVERAGE SYS_START SYS_END TS_ID BUS_START BUS_END --------- ----------- -------------------------------- -------------------------------- -------------------------------- ---------- ------------------------------------- ABC 12000 0001-01-01-00.00.00.000000000000 9999-12-30-00.00.00.000000000000 0001-01-01-00.00.00.000000000000 10/10/2001 10/10/2002 DEF 13000 0001-01-01-00.00.00.000000000000 9999-12-30-00.00.00.000000000000 0001-01-01-00.00.00.000000000000 10/10/2001 10/10/2002 ERT 14000 0001-01-01-00.00.00.000000000000 9999-12-30-00.00.00.000000000000 0001-01-01-00.00.00.000000000000 10/10/2001 10/10/2002
ユーザーがテンポラル表の更新を開始すると、履歴表に変更前イメージが移入されます。
- 例4 異種環境でのレプリケーション。
-
適用側にテンポラル表がない異種構成でレプリケートできるのはシステム期間テンポラル表とバイテンポラル表のみであり、関連する履歴表はレプリケートできません。この状況でレプリケーションを実行する際は、
SYSTEM_PERIOD
列とトランザクションID列の値を処理する必要があります。これらの列にはターゲット・データベースでサポートされない値が含まれている可能性があります。最初にマップ変換関数を使用して、これらの値をターゲット・データベースでサポートされる形式に変換してから、列を適切にマップする必要があります。たとえば、MySQLの
DATETIME
範囲は1000-01-01 00:00:00.000000
から9999-12-31 23:59:59.999999
までです。タイムスタンプ値0001-01-01-00.00.00.000000000000
はMySQLにレプリケートできません。このような値をレプリケートするには、この値をMySQLのDATETIME
値1000-01-01 00:00:00.000000
に変換してから、列をマップする必要があります。次の行がpolicy_info
システム期間表にある場合:POLICY_ID COVERAGE SYS_START SYS_END TS_ID --------- ----------- -------------------------------- -------------------------------- ------------------------------------------------------------------------------- ABC 12000 0001-01-01-00.00.00.000000000000 9999-12-30-00.00.00.000000000000 0001-01-01-00.00.00.000000000000
この行をMySQLにレプリケートするには、次のように
colmap()
関数を使用します。map source_schema.policy_info, target target_schema.policy_info colmap (policy_id=policy_id, coverage=coverage, sys_start= @IF( ( @NUMSTR( @STREXT(sys_ start,1,4))) > 1000, sys_start, '1000-01-01 00.00.00.000000'), sys_end=sys_end, ts_id= @IF( ( @NUMSTR( @STREXT(ts_id,1,4))) > 1000, ts_id, '1000-01-01 00.00.00.000000'));
親トピック: テンポラル表の作成
チェックポイント表の作成
チェックポイント表はReplicatの必須コンポーネントです。
Replicatは、リカバリ・チェックポイントをチェックポイント表に保持して、ターゲット・データベースに格納します。チェックポイントは、Replicatトランザクション内でチェックポイント表に書き込まれます。チェックポイントはトランザクションに対して成功または失敗のいずれかであるため、プロセスまたはデータベースで障害が発生した場合でも、トランザクションは一度のみ適用されることがReplicatにより保証されます。
チェックポイント表を構成する場合は、『Oracle GoldenGateの管理』のチェックポイント表の作成に関する項を参照してください。
親トピック: テンポラル表の作成
Replicatパラメータ・ファイルの構成
次のステップでは、Replicatプロセスを構成します。このプロセスでは、レプリケートされたデータがDB2 LUWターゲット・データベースに適用されます。
親トピック: テンポラル表の作成
トランザクション変更のレプリケートを開始するタイミング
ソース・データとターゲット・データが同期している状態、つまり、ソース表とターゲット表の対応する行に同一のデータ値が含まれる場合にレプリケーションを開始する必要があります。現在のユーザー・アクティビティがない完全に新規のソース・データベースとターゲット・データベースから始める場合以外、変更取得プロセスおよび変更適用プロセスをアクティブにし、初期ロードをターゲットに適用する間に進行中のトランザクション変更を処理する必要があります。このプロセスは、初期同期またはインスタンス化と呼ばれます。初期ロードでは、ソース・データのポイントインタイム・スナップショットが取得されてターゲットに適用されると同時に、その時点以降に行われた変更がOracle GoldenGateによって保持されます。
インスタンス化オプションは、『Oracle GoldenGateの管理』の初期ロードによるOracle GoldenGateのインスタンス化に関する項を参照してください。