ヘッダーをスキップ

Oracle Database 2日でデータ・レプリケーションおよび統合ガイド
11g リリース1(11.1)

E05777-03
目次
目次
索引
索引

戻る 次へ

4 Oracle Streamsを使用したデータのレプリケート

この章では、Oracle Streamsレプリケーションに関する概念を示し、データベース間のデータの連続的なレプリケート方法を説明します。

この章は次の項で構成されています。

Oracle Streamsレプリケーションの概要

レプリケーションは、複数のデータベースでデータベース・オブジェクトとデータを共有するプロセスです。データベース・オブジェクトとデータを複数のデータベースでメンテナンスするために、あるデータベースでのこれらのデータベース・オブジェクトの1つに対する変更が他のデータベースと共有されます。このようにして、レプリケーション環境内のすべてのデータベースでデータベース・オブジェクトとデータの同期が維持されます。

一部のレプリケーション環境は、共有データベース・オブジェクトに対して行われた変更を絶えずレプリケートする必要があります。Oracle Streamsは、連続レプリケーションのためのOracle Database機能です。通常、このような環境では、共有データベース・オブジェクトを含むデータベースがほぼ常にネットワークに接続され、これらのネットワーク接続上でデータベース変更を絶えずプッシュします。

1つの共有データベース・オブジェクトに対して変更が行われると、Oracle Streamsは次のアクションを実行して、同じ変更が他の各データベースの対応する共有データベース・オブジェクトに対して行われるようにします。

  1. Oracle Streamsは、変更を自動的に取得し、それをキューにステージングします。

  2. Oracle Streamsは、共有データベース・オブジェクトを含む他の各データベース内のキューに変更を自動的にプッシュします。

  3. Oracle Streamsは、他の各データベースでの変更を自動的に処理します。処理中に、Oracle Streamsはキューから変更をデキューし、変更を共有データベース・オブジェクトに適用します。

図4-1に、Oracle Streams情報フローを示します。

図4-1    Oracle Streamsの情報フロー


画像の説明

Oracle Streamsレプリケーションを使用して、複数のデータベースでデータを共有し、これらのデータベースでデータを効率よく最新に保つことができます。たとえば、全世界にいくつかのコール・センターを持つ会社は、顧客情報を各コール・センターのローカル・データベースに格納できます。このような環境では、Oracle Streamsでの連続レプリケーションにより、ある場所の顧客データに対して行った変更が、できるだけ早く他のすべての場所にプッシュされるようにすることができます。

Oracle Streamsを使用してデータベース・オブジェクトに対する変更を取得する場合、変更は論理変更レコード(LCR)に書式設定されます。LCRは、データベース変更を説明する特定の形式のメッセージです。変更がデータ操作言語(DML)操作だった場合は、行LCRにより、DML操作の結果として発生した行変更がそれぞれカプセル化されます。1つのDML操作によって複数の行変更が発生する場合があるため、1つのDML操作によって複数の行LCRが発生することがあります。変更がデータ定義言語(DDL)操作だった場合、1つのDDL LCRがDDL変更をカプセル化します。

次の各項で、Oracle Streamsレプリケーションを詳細に説明します。

変更の取得の概要

Oracle Streamsは、データベース変更を自動的に取得する2つの方法を提供します。

単一の取得プロセスまたは単一の同期取得は、1つのデータベースのみに対して行われた変更を取得できます。変更が発生したデータベースは、変更のソース・データベースと呼ばれます。


注意:

このマニュアルの例ではDMLの変更のみをレプリケートします。DMLを変更する前に、DDL変更のレプリケートを理解する必要があります。DDL変更のレプリケートの詳細は、『Oracle Streamsレプリケーション管理者ガイド』および『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。 


参照:

 

取得プロセスでの変更の取得の概要

取得プロセスは、REDOログに記録された変更を非同期に取得するOracle Databaseのオプションのバックグラウンド処理です。取得プロセスは、データベース変更を取得すると、それを論理変更レコード(LCR)に変換し、LCRをエンキューします。

取得プロセスは、単一のキューに常に関連付けられ、LCRをこのキューにのみエンキューします。パフォーマンスを向上させるために、取得されたLCRは常にバッファ・キューに格納されます。バッファ・キューは、キューに関連付けられているシステム・グローバル領域(SGA)メモリーです。

図4-2では、取得プロセスがどのように動作するかを示します。

図4-2    取得プロセス


画像の説明

取得プロセスは、ソース・データベースまたはリモート・データベース上で実行できます。ソース・データベース上で実行する場合、取得プロセスはローカル取得プロセスと呼ばれます。リモート・データベース上で実行する場合、取得プロセスはダウンストリーム取得プロセスと呼ばれます。

ダウンストリーム取得では、REDO転送サービスは、ソース・データベースのログ・ライター・プロセス(LGWR)を使用して、ダウンストリーム取得を実行するデータベースにREDOデータを送信します。異なるデータベースが変更を取得するため、ダウンストリーム取得プロセスではソース・データベースのリソースが少なくてすみます。一方、ローカル取得プロセスは、ダウンストリーム取得よりも構成と管理が簡単です。ローカル取得プロセスによって、プラットフォームまたはOracle Databaseのバージョンが異なるレプリケーション環境にも柔軟性が提供されます。

参照:

 

同期取得での変更の取得の概要

REDOログの非同期マイニングのかわりに、同期取得は内部メカニズムを使用して、データ操作言語(DML)の変更が表に対して行われたときにその変更を取得します。単一のDML変更によって、表の1つ以上の行が変更されることがあります。同期取得はそれぞれの行変更を取得し、それを行の論理変更レコード(LCR)に変換してエンキューします。

同期取得は常に単一のキューに関連付けられ、行LCRをこのキューにのみエンキューします。同期取得は常に行LCRを永続キューにエンキューします。永続キューは、メモリーではなくハード・ディスク上のキュー表にメッセージを格納するキューの部分です。

通常、同期取得は、比較的少数の表に対する変更を取得するレプリケーション環境で使用するのが最適です。多くの表、スキーマ全体またはデータベース全体に対する変更を取得する必要がある場合は、同期取得のかわりに取得プロセスを使用する必要があります。

図4-3では、同期取得がどのように動作するかを示します。

図4-3    同期取得


画像の説明


注意:

Oracle Database 11g Standard Editionを使用している場合、同期取得はデータベース変更を自動的に取得できる唯一のOracle Streamsコンポーネントです。取得プロセスを使用するには、Oracle Database 11g Enterprise Editionが必要です。 


参照:

 

データベース間の変更の伝播の概要

伝播は1つのキューから他のキューにメッセージを送信します。Oracle Streamsを使用して、同じデータベース内、または異なるデータベース内の2つのキュー間のメッセージ伝播を構成できます。Oracle Streamsは、データベース・リンクとOracle Schedulerジョブを使用してメッセージを送信します。伝播は常に「ソース・キュー」「宛先キュー」の間で行われます。Oracle Streamsレプリケーション環境では、伝播は通常、ローカル・データベース内のソース・キューからリモート・データベース内の宛先キューにデータベース変更を記述するメッセージを(LCRの形式で)送信します。

図4-4では、伝播を示します。

図4-4    伝播


画像の説明

参照:

 

変更の適用の概要

データベース変更が取得されて伝播された後、これらの変更はキューに存在し、レプリケーション・プロセスを完了するために適用する準備ができます。適用プロセスは、論理変更レコード(LCR)およびその他のタイプのメッセージを特定のキューからデキューするオプションのOracle Databaseバックグラウンド・プロセスです。単純なOracle Streamsレプリケーション環境では、通常、適用プロセスはデキューするLCR内の変更をローカル・データベースのデータベース・オブジェクトに直接適用します。

適用プロセスは、常に単一のキューに関連付けられ、このキューからのみメッセージをデキューします。単一の適用プロセスは、バッファ・キューまたは永続キューからメッセージをデキューできますが、両方からデキューすることはできません。したがって、適用プロセスが、取得プロセスによって取得された変更を適用する場合は、バッファ・キューからLCRをデキューするように適用プロセスを構成する必要があります。一方、適用プロセスが、同期取得によって取得された変更を適用する場合は、永続キューからLCRをデキューするように適用プロセスを構成する必要があります。

図4-5では、適用プロセスがどのように動作するかを示します。

図4-5    適用プロセス


画像の説明

適用プロセスは、LCRを正常に適用できない場合に、LCR、およびトランザクション内の他のすべてのLCRをエラー・キューという特別なキューに移動します。エラー・キューには、データベースの現在の適用エラーがすべて含まれます。データベースに複数の適用プロセスがある場合、エラー・キューには各適用プロセスの適用エラーが含まれます。エラーの原因となった条件を修正してから、エラー・キュー内の対応するトランザクションを再実行して変更を適用します。たとえば、表の行を変更してトランザクション・エラーの原因となった条件を修正し、トランザクションを再実行できます。

適用プロセスが変更をデータベース・オブジェクトに適用するためには、インスタンス化システム変更番号(SCN)をデータベース・オブジェクトに対して設定する必要があります。インスタンス化SCNは、ソース・データベースのSCNの後にコミットされた変更のみが適用プロセスによって適用されることを指定するデータベース・オブジェクトのSCNです。表のインスタンス化SCNでは、ソース・データベースと宛先データベースで指定されたSCNに一貫性があることを前提としています。通常、インスタンス化SCNは、Oracle Streamsレプリケーション環境を構成するときに自動的に設定されます。


注意:

適用プロセスは、デキューするメッセージを、適用ハンドラと呼ばれるカスタム処理のユーザー定義プロシージャにパラメータとして渡すこともできます。適用ハンドラについては、このマニュアルでは説明しません。詳細は、『Oracle Streams概要および管理』を参照してください。 


参照:

 

取得、伝播および適用の動作を制御するルールの概要

Oracle Streamsレプリケーション構成では、レプリケート対象を指定する必要があります。取得プロセス、同期取得、伝播および適用プロセスは、Oracle Streamsクライアントと呼ばれます。Oracle Streamsクライアントがレプリケートする対象は、ルールによって決まります。ルールはOracle Streamsクライアントごとに個別に設定でき、異なるOracle Streamsクライアント間でルールが一致している必要はありません。

ルールはルール・セットに編成でき、各Oracle Streamsクライアントの動作は、Oracle Streamsクライアントに関連付けられているルール・セット内のルールによって決まります。ポジティブ・ルール・セットネガティブ・ルール・セットを取得プロセス、伝播および適用プロセスに関連付けることができますが、同期取得に関連付けることができるのはポジティブ・ルール・セットのみです。

レプリケーション環境では、データベース変更がルール・セットを満たす場合にOracle Streamsクライアントがそのタスクを実行します。一般に、変更がOracle Streamsクライアントのルール・セットを満たすのは、変更についてネガティブ・ルール・セットのどのルールもTRUEと評価されず、ポジティブ・ルール・セットの1つ以上のルールが変更についてTRUEと評価される場合です。ネガティブ・ルール・セットが常に最初に評価されます。

Oracle Streamsレプリケーション環境でルール・セットを使用すると、具体的には次のことができます。

同一でないコピーのルールベースの変換の概要

ルールベース変換は、複数のデータベースでデータベース・オブジェクトが同一でない場合に柔軟性を提供する追加の構成オプションです。ルールベース変換では、各データベースで正常に適用できるように、データベース・オブジェクトに対する変更を修正できます。ルールベース変換は、ポジティブ・ルール・セット内のルールがTRUEと評価された場合のメッセージに対する修正を示します。

たとえば、変更が発生したデータベースで表に5つの列があり、別のデータベースの共有表には5つの列のうちの4つしかないとします。データ操作言語(DML)操作がソース・データベースの表に対して実行されると、行変更が取得され、行LCRとして書式設定されます。ルールベース変換は、他のデータベースに正常に適用できるようにこれらの行LCR内の余分な列を削除できます。行LCRが変換されない場合、行LCRには余分な列があるため他のデータベースでの適用プロセスでエラーが発生します。

ルールベース変換には、宣言カスタムの2種類があります。宣言ルールベース変換には、DML変更(行LCR)の結果として発生した行変更の一般的な変換シナリオのセットが含まれます。カスタム・ルールベース変換には、変換を実行するためのユーザー定義PL/SQLファンクションが必要です。このマニュアルでは、宣言ルールベース変換についてのみ説明します。

次の宣言ルールベース変換を使用できます。

これらの宣言ルールベース変換の1つを追加するときに、変換に関連付けるルールを指定します。指定したルールが行LCRについてTRUEと評価される場合、Oracle Streamsは行 LCRで宣言変換を内部的に実行します。通常、ルールとルール・セットはOracle Streamsレプリケーション環境を構成するときに自動的に作成されます。

1つのルールに対して複数の宣言ルールベース変換を構成できますが、カスタム・ルールベース変換は、1つのルールに対して1つのみ構成できます。また、1つのルールに対して宣言ルールベース変換とカスタム・ルールベース変換の両方を構成することもできます。

変換は、Oracle Streams情報フローの任意のステージ(取得中、伝播中または適用中)で発生します。変換がいつ発生するかは、変換が関連付けられているルールによって決まります。たとえば、伝播中に変換を実行するには、変換を伝播のポジティブ・ルール・セットのルールに関連付けます。

参照:

  • ルールベースの変換の詳細は、『Oracle Streams概要および管理』を参照してください。

 

サプリメンタル・ロギングの概要

サプリメンタル・ロギングは、操作(行の更新など)が実行されるたびにREDOログに配置される追加の列データのプロセスです。取得プロセスは、この追加情報を取得し、論理変更レコード(LCR)に配置します。これらのLCRを適用する適用プロセスは、データベース変更を正しく適用するためにこの追加情報を必要とします。

参照:

  • サプリメンタル・ロギングの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

 

競合と競合解消の概要

競合は、表のデータを共有している2つの異なるデータベースが表の同じ行をほぼ同時に変更した場合に発生します。これらの変更がこれらのデータベースの一方で取得され、もう一方のデータベースに送信されると、適用プロセスは、行LCRを表に適用しようとしたときに競合を検出します。デフォルトでは、適用エラーがエラー・キューに入れられ、そこで手動で解消できます。適用エラーを回避するには、適用プロセスが環境に最適な方法で競合を処理するように競合解消を構成する必要があります。

Oracle Databaseには、行のUPDATEが原因で競合が発生した場合に競合を解消する競合ハンドラが組み込まれています。これらのハンドラは、組込み更新競合ハンドラと呼ばれています。

適用プロセスで、デキューされた行LCRに対する更新競合が発生した場合、2つのデータベースのデータの一貫性を維持するために行LCRを適用するか破棄する必要があります。更新競合を解消する最も一般的な方法は、最新のタイムスタンプを持つ変更を保持し、古い変更を破棄することです。表に最新の時刻競合解消を構成する方法については、「チュートリアル: 表の最新時刻競合解消の構成」を参照してください。

次の各項で、特定のタイプのレプリケーション環境で競合解消を構成する方法を説明します。

変更の循環を回避するためのタグの概要

変更循環は、発生元のデータベースに変更を再び送信することを意味します。通常は、変更循環によって各データベース変更の結果が発生元のデータベースに無限にループするため、変更循環を回避する必要があります。このようなループによって、データベース内に意図しないデータが生成され、ネットワーキングと環境のコンピュータ・リソースに負荷がかかります。デフォルトでは、Oracle Streamsは変更循環を回避するように設計されています。

タグは、変更レコード内の追加情報です。データベース変更を記録する各REDOエントリと、データベース変更をカプセル化する各論理変更レコード(LCR)には、タグが含まれます。タグのデータ型はRAWです。

デフォルトでは、変更レコードには次のタグ値があります。

LCRのタグ値は、LCRがどのように取得されたかによって決まります。

Oracle Streamsクライアントのルールには、タグ値の条件を含めることができます。たとえば、取得プロセスのルールは、REDOレコードのタグ値に基づいてREDOログ内の変更が取得されるかどうかを決定できます。Oracle Streamsレプリケーション環境では、Oracle Streamsクライアントはタグとルールを使用して変更循環を回避します。

次の各項で、特定のタイプのレプリケーション環境で変更循環が回避される方法を説明します。

Oracle Streamsレプリケーション環境の一般的なタイプの概要

Oracle Streamsにより、多くの異なるタイプのカスタム・レプリケーション環境を構成できます。ただし、最も一般的なのは、2データベース、ハブアンドスポークおよびn-wayの3つのタイプのレプリケーション環境です。

次の各項で、これらの一般的なレプリケーション環境タイプについて説明し、どのタイプを使用するのが最適かの決定を支援します。

2データベース・レプリケーション環境の概要

2データベース・レプリケーション環境は、レプリケートされたデータベース・オブジェクトを2つのデータベースのみで共有するレプリケーション環境です。一方のデータベースでレプリケートされたデータベース・オブジェクトに対して行われた変更は、取得された後、もう一方のデータベースに直接送信されて適用されます。2データベース・レプリケーション環境では、一方のデータベースのみでデータベース・オブジェクトに対する変更が許可される場合も、両方のデータベースでデータベース・オブジェクトに対する変更が許可される場合もあります。

レプリケートされたデータベース・オブジェクトに対する変更が一方のデータベースのみで許可されている場合、もう一方のデータベースには、これらのデータベース・オブジェクトの読取り専用レプリカが含まれます。これを単方向レプリケーション環境と呼び、通常は次の基本コンポーネントが含まれます。

図4-6に、単方向レプリケーション用に構成された2データベース・レプリケーション環境を示します。

図4-6    2データベース・レプリケーション環境の単方向レプリケーション


画像の説明

2データベース・レプリケーション環境では、両方のデータベースで、レプリケートされたデータベース・オブジェクトを変更できます。この場合、データベース・オブジェクトに対する変更は、両方のデータベースで取得され、他方のデータベースに送信されて取得されます。これを双方向レプリケーション環境と呼び、通常は次の基本コンポーネントが含まれます。

図4-7に、双方向レプリケーション用に構成された2データベース・レプリケーション環境を示します。

図4-7    2データベース・レプリケーション環境の双方向レプリケーション


画像の説明

通常、双方向レプリケーション環境では、レプリケートされたデータベース・オブジェクトの同期化を維持するために競合解消を構成する必要があります。DBMS_STREAMS_ADMパッケージの構成プロシージャを使用して、2データベース・レプリケーション環境を構成できます。「Oracle Streamsレプリケーションの構成プロシージャの概要」を参照してください。

参照:

 

ハブアンドスポーク・レプリケーション環境の概要

ハブアンドスポーク・レプリケーション環境は、集中データベース(ハブ)がセカンダリ・データベース(スポーク)と通信する環境です。スポークは相互に直接通信しません。ハブアンドスポーク・レプリケーション環境では、スポークはレプリケートされたデータベース・オブジェクトに対する変更を許可する場合と許可しない場合があります。

スポークが変更を許可しない場合、スポークにはハブのデータベース・オブジェクトの読取り専用レプリカが含まれます。このタイプのハブアンドスポーク・レプリケーション環境には、通常は次の基本コンポーネントがあります。

図4-8に、読取り専用スポークのあるハブアンドスポーク・レプリケーション環境を示します。

図4-8    読取り専用スポークのあるハブアンドスポーク・レプリケーション環境


画像の説明

スポークがデータベース・オブジェクトに対する変更を許可する場合、通常は変更が取得されてハブに送信され、ハブが他のスポークに変更をレプリケートします。このタイプのハブアンドスポーク・レプリケーション環境には、通常は次の基本コンポーネントがあります。

図4-9に、読取り/書込みスポークのあるハブアンドスポーク・レプリケーション環境を示します。

図4-9    読取り/書込みスポークのあるハブアンドスポーク・レプリケーション環境


画像の説明

通常、スポーク・データベースでの変更が許可されるハブアンドスポーク・レプリケーション環境では、レプリケートされたデータベース・オブジェクトの同期化を維持するために競合解消を構成する必要があります。ハブアンドスポーク・レプリケーション環境では、レプリケートされたデータベース・オブジェクトに対する変更が一部のスポークでは許可されますが、残りのスポークでは許可されない場合があります。

DBMS_STREAMS_ADMパッケージの構成プロシージャを使用して、ハブアンドスポーク・レプリケーション環境を構成できます。「Oracle Streamsレプリケーションの構成プロシージャの概要」を参照してください。

ハブアンドスポーク・レプリケーションが有効な場合については、「Oracle Streamsでのデータのレプリケート時期」を参照してください。

参照:

 

n-wayレプリケーション環境の概要

n-wayレプリケーション環境は、各データベースが環境内の他のデータベースと相互に直接通信する環境です。あるデータベースでのレプリケートされたデータベース・オブジェクトに対する変更は、取得されて環境内の他の各データベースに直接送信され、そこで適用されます。

n-wayレプリケーション環境には、通常は次の基本コンポーネントがあります。

図4-10に、n-wayレプリケーション環境を示します。

図4-10    n-wayレプリケーション環境


画像の説明

オラクル社が提供する次のパッケージを使用して、n-wayレプリケーション環境を構成できます。

n-wayレプリケーションが有効な場合については、「Oracle Streamsでのデータのレプリケート時期」を参照してください。

通常、n-wayレプリケーション環境では、レプリケートされたデータベース・オブジェクトの同期化を維持するために競合解消を構成する必要があります。

n-wayレプリケーション環境の構成は、このマニュアルの対象外です。n-wayレプリケーション環境を構成する例の詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

Oracle Streamsレプリケーションの構成プロシージャの概要

Oracle Streamsレプリケーション環境を構成する最も簡単な方法は、DBMS_STREAMS_ADMパッケージにある次のいずれかの構成プロシージャを実行することです。

これらのプロシージャは、同時に2つのデータベースを構成します。一方のデータベースをソース・データベースに、もう一方のデータベースを宛先データベースに指定する必要があります。これらのプロシージャを複数回実行することによって、2つ以上のデータベースを使用するレプリケーション環境を構成できます。

表4-1に、これらのプロシージャに必要なパラメータを示します。

表4-1    Oracle Streamsレプリケーションの構成プロシージャに必要なパラメータ 
パラメータ  プロシージャ  説明 

source_directory_object 

すべてのプロシージャ 

ソース・データベースを実行するコンピュータ・システム上のディレクトリのディレクトリ・オブジェクト。このディレクトリには、生成されたデータ・ポンプ・エクスポート・ダンプ・ファイルが保存されます。 

destination_directory_object 

すべてのプロシージャ 

宛先データベースを実行するコンピュータ・システム上のディレクトリのディレクトリ・オブジェクト。このディレクトリには、生成されたデータ・ポンプ・エクスポート・ダンプ・ファイルが転送されます。ダンプ・ファイルは、レプリケートされたデータベース・オブジェクトを宛先データベースでインスタンス化するために使用します。 

source_database 

すべてのプロシージャ 

ソース・データベースのグローバル名。指定されたデータベースには、レプリケートするデータベース・オブジェクトが含まれる必要があります。 

destination_database 

すべてのプロシージャ 

宛先データベースのグローバル名。レプリケートするデータベース・オブジェクトは、宛先データベースではオプションです。宛先データベースにデータベース・オブジェクトが存在しない場合、データベース・オブジェクトはデータ・ポンプ・エクスポート/インポートを使用してインスタンス化されます。

宛先データベースがローカル・データベースでない場合は、ローカル・データベースから宛先データベースへのデータベース・リンクが存在する必要があります。このデータベース・リンクは、宛先データベースのグローバル名と同じ名前を持ち、プロシージャを実行するユーザーからアクセス可能である必要があります。 

schema_names 

MAINTAIN_SCHEMASのみ 

レプリケーション用に構成されるスキーマ。 

tablespace_name 

MAINTAIN_SIMPLE_TTSのみ 

レプリケーション用に構成される表領域。 

table_names 

MAINTAIN_TABLESのみ 

レプリケーション用に構成される表。 

tablespace_names 

MAINTAIN_TTSのみ 

レプリケーション用に構成される表領域。 

また、各プロシージャには、オプションのパラメータもあります。bi_directionalパラメータは、重要なオプションのパラメータです。レプリケートされたデータベース・オブジェクトに対する変更を各データベースで取得して、他のデータベースに送信するには、bi_directionalパラメータをTRUEに設定する必要があります。このパラメータのデフォルトの設定はFALSEです。bi_directionalパラメータがFALSEに設定されていると、プロシージャは、宛先データベースでの変更が取得されない単方向レプリケーション環境を構成します。

これらのプロシージャは、Oracle Streamsレプリケーション環境を構成するために複数のタスクを実行します。次のタスクがあります。

これらのプロシージャでは、常にハブアンドスポーク・レプリケーション環境用のタグが構成されます。これらのプロシージャおよびタグに関する重要な考慮事項を次に示します。

タグおよび様々なタイプのレプリケーション環境については、「変更の循環を回避するためのタグの概要」および「Oracle Streamsレプリケーション環境の一般的なタイプの概要」を参照してください。


注意:

現在、これらの構成プロシージャで構成できるのは、変更を取得する取得プロセスのみです。同期取得を使用するレプリケーション環境をこれらのプロシージャで構成することはできません。同期取得は、DBMS_STREAMS_ADMパッケージのADD_TABLE_RULESおよびADD_SUBSET_RULESプロシージャを使用して構成できます。 


参照:

 

Oracle Streamsが提供する主要なPL/SQLパッケージおよびデータ・ディクショナリ・ビューの概要

Oracle Enterprise Manager以外にも、Oracle Streamsレプリケーション環境を構成および管理するためのPL/SQLパッケージが提供されています。また、Oracle Streamsレプリケーション環境を監視するためのデータ・ディクショナリ・ビューも提供されています。

次の各項で、Oracle Streamsが提供する主要なPL/SQLパッケージおよびデータ・ディクショナリ・ビューについて説明します。

Oracle Streamsが提供する主要なPL/SQLパッケージの概要

表4-2に、Oracle Streamsレプリケーション環境の構成および管理に重要なPL/SQLパッケージを示します。

表4-2    Oracle Streamsが提供する主要なPL/SQLパッケージ 
パッケージ  説明 

DBMS_STREAMS_ADM 

このパッケージを使用すると、Oracle Streams環境で一般的なタスクを簡単に実行できます。このパッケージには、Oracle Streamsレプリケーション環境を構成および維持するためのプロシージャが含まれます。また、表、スキーマおよびデータベース・レベルで、取得プロセス、同期取得、伝播および適用プロセスのための単純なルールを追加および削除するための管理インタフェースも備わっています。さらに、キューの作成や、Oracle Streamsメタデータ(データ・ディクショナリ情報など)の管理のためのプロシージャが含まれます。 

DBMS_CAPTURE_ADM 

このパッケージでは、取得プロセスの起動、停止および構成のための管理インタフェースが提供されます。また、同期取得の構成のための管理インタフェースも提供されます。さらに、宛先データベースでのインスタンス化に備えて、ソース・データベースでデータベース・オブジェクトを準備するための管理プロシージャも提供されます。 

DBMS_PROPAGATION_ADM 

このパッケージでは、伝播の起動、停止および構成のための管理インタフェースが提供されます。 

DBMS_APPLY_ADM 

このパッケージでは、適用プロセスの起動、停止および構成のための管理インタフェースが提供されます。また、競合の検出と解消の構成および適用エラーの管理のためのサブプログラムも含まれます。さらに、このパッケージには、適用ハンドラを構成できるプロシージャも含まれます。このパッケージには、宛先データベースでオブジェクトのインスタンス化SCNを設定する管理プロシージャが用意されています。 

DBMS_STREAMS_AUTH 

このパッケージでは、Oracle Streams管理者に対する権限の付与および取消しのためのサブプログラムが提供されます。 

DBMS_STREAMS_ADVISOR_ADM 

このパッケージでは、Oracle Streams環境についての情報の収集および収集した情報に基づくデータベース管理者へのアドバイスを行うためのインタフェースが提供されます。このパッケージは、Oracle Streamsパフォーマンス・アドバイザの一部です。 

参照:

 

Oracle Streamsの主要なデータ・ディクショナリ・ビューの概要

表4-3に、Oracle Streamsレプリケーション環境の監視に重要なデータ・ディクショナリ・ビューを示します。

表4-3    Oracle Streamsの主要なデータ・ディクショナリ・ビュー 
データ・ディクショナリ・ビュー  説明 

ALL_APPLY

DBA_APPLY 

適用プロセスに関する情報を表示します。 

ALL_APPLY_CONFLICT_COLUMNS

DBA_APPLY_CONFLICT_COLUMNS 

競合ハンドラに関する情報を表示します。 

ALL_APPLY_ERROR

DBA_APPLY_ERROR 

適用プロセスが生成するエラー・トランザクションに関する情報を表示します。 

ALL_CAPTURE

DBA_CAPTURE 

取得プロセスに関する情報を表示します。 

ALL_PROPAGATION

DBA_PROPAGATION 

伝播に関する情報を表示します。 

ALL_STREAMS_COLUMNS

DBA_STREAMS_COLUMNS 

同期取得および適用プロセスでサポートされていない列に関する情報を表示します。 

ALL_STREAMS_RULES

DBA_STREAMS_RULES 

取得プロセス、同期取得、伝播および適用プロセスで使用されるルールに関する情報を表示します。 

ALL_STREAMS_UNSUPPORTED

DBA_STREAMS_UNSUPPORTED 

取得プロセスでサポートされていないデータベース・オブジェクトに関する情報を表示します。 

ALL_SYNC_CAPTURE

DBA_SYNC_CAPTURE 

同期取得に関する情報を表示します。 

V$BUFFERED_QUEUES 

バッファ・キューおよびバッファ・キュー内のメッセージに関する情報を表示します。 

V$PROPAGATION_RECEIVER 

伝播によってバッファ・キュー内に受信されるメッセージに関する情報を表示します。 

V$PROPAGATION_SENDER 

伝播によってバッファ・キューから送信されるメッセージに関する情報を表示します。 

V$STREAMS_APPLY_COORDINATOR 

有効化されている適用プロセスのコーディネータに関する情報を表示します。 

V$STREAMS_APPLY_READER 

有効化されている適用プロセスのリーダー・サーバーに関する情報を表示します。 

V$STREAMS_APPLY_SERVER 

有効化されている適用プロセスの適用サーバーに関する情報を表示します。 

V$STREAMS_CAPTURE 

有効化されている取得プロセスに関する情報を表示します。 

V$STREAMS_TRANSACTION 

取得プロセスまたは適用プロセスによって処理されているトランザクションに関する情報を表示します。このビューを使用すると、長時間実行トランザクションの識別し、各トランザクションで処理されている論理変更レコード(LCR)の数を判断できます。このビューには、取得プロセスで取得されたLCRに関する情報のみが表示されます。 

参照:

 

Oracle Streamsレプリケーションの準備

Oracle Streamsレプリケーションを構成する前に、レプリケーション環境に参加するデータベースを準備します。

Oracle Streamsレプリケーションを準備するには:
  1. Oracle Streamsでレプリケーション環境を構成する前に、初期化パラメータを正しく設定します。

    • グローバル名: Oracle Streamsレプリケーション環境に参加する各データベースでGLOBAL_NAMES初期化パラメータをTRUEに設定します。「GLOBAL_NAMES初期化パラメータをTRUEに設定」を参照してください。

    • 互換性: Oracle Streamsの最新の機能を使用するには、COMPATIBLE初期化パラメータをできるだけ高く設定することをお薦めします。可能な場合は、このパラメータを11.1.0以上に設定します。

    • システム・グローバル領域(SGA)およびOracle Streamsプール: Oracle Streamsプールが、レプリケーション環境に対して作成されるOracle Streamsコンポーネントを十分に収容できる大きさであることを確認します。Oracle Streamsプールは、システム・グローバル領域(SGA)の一部です。MEMORY_TARGET初期化パラメータ(自動メモリー管理)、SGA_TARGET初期化パラメータ(自動共有メモリー管理)またはSTREAMS_POOL_SIZE初期化パラメータを設定することにより、Oracle Streamsを管理できます。Oracle Streamsプールの詳細は、『Oracle Streams概要および管理』を参照してください。

      Oracle Streamsコンポーネントのメモリー要件は次のとおりです。

      • 各キューには、少なくとも10MBのメモリーが必要です。

      • 各取得プロセスの並列処理には、少なくとも10MBのメモリーが必要です。取得プロセスが変更を取得する際に使用する処理の数は、取得プロセス・パラメータparallelismで制御されます。取得プロセスのパフォーマンスは、取得プロセスの並行性を調整すると改善される場合があります。

      • 各伝播には少なくとも1MBのメモリーが必要です。

      • 各適用プロセスの並列処理には、少なくとも1MBのメモリーが必要です。適用プロセスが変更を適用する際に使用する処理の数は、適用プロセス・パラメータparallelismで制御されます。適用プロセスのパフォーマンスは、適用プロセスの並行性を調整すると改善される場合があります。

    • 処理とセッション: Oracle Streams取得プロセス、伝播および適用プロセスは、バックグラウンドで実行されるプロセスを使用します。これらのプロセスに適応するにはPROCESSESおよびSESSIONS初期化パラメータの値を増やすことが必要な場合があります。

  2. Oracle Streamsレプリケーション環境のベスト・プラクティスを確認し、環境を構成する際にはそれに従います。ベスト・プラクティスの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

    ベスト・プラクティスに従えば、パフォーマンスの最適な環境を構成して問題を回避することができます。DBMS_STREAMS_ADMパッケージの構成プロシージャを使用すれば自動的にベスト・プラクティスに従いますが、構成プロシージャを使用せずにOracle Streamsレプリケーション環境を構成する場合は、ベスト・プラクティスをよく確認し、できるだけそれに従ってください。

    次に、Oracle Streamsの構成時に従う必要のある重要なベスト・プラクティスを示します。

    • Oracle Streams管理者に個別の表領域を構成します。「チュートリアル: Oracle Streams管理者の作成」の手順がこのベスト・プラクティスに従っています。

    • 取得プロセス、同期取得および適用プロセスに個別のキューを使用します。最適なパフォーマンスを得るには、通常、これらのコンポーネントがキューを共有しないようにする必要があります。

    • キュー・ツー・キュー伝播を使用します。

    Oracle Streams環境を構成した後は、Oracle Streams環境での操作時に次の重要なベスト・プラクティスに従う必要があります。

    • パフォーマンスを監視し、必要に応じて調整します。

    • キューのサイズを監視します。

    • バックアップに関するOracle Streamsのベスト・プラクティスに従います。

    • Oracle Streamsの情報に関するアラート・ログを確認します。

    • 最適なパフォーマンスを得るために、取得プロセスの並列性を設定します。

    • 最適なパフォーマンスを得るために、適用プロセスの並列性を設定します。

    • 適用エラーを確認し、発生する場合は管理します。

これらのベスト・プラクティスと、その他のOracle Streamsのベスト・プラクティスの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

参照:

 

Oracle Streamsレプリケーションの構成: 例

この項では、Oracle Streamsレプリケーション環境の構成方法について、例を使用して説明します。例では、最も一般的なタイプのOracle Streamレプリケーション環境を構成します。

次に、例について説明します。

この項では、表の競合解消を構成する例も示します。「チュートリアル: 表の最新時刻競合解消の構成」を参照してください。競合解消は、レプリケートされた表に対するDML変更の実行を2つ以上のデータベースに対して許可するレプリケーション環境で使用します。この例は、最新時刻の競合解消を構成しています。このため、表に対する行変更によって競合が発生すると、最新の変更は保持され、古い変更は破棄されます。競合解消の詳細は、「競合と競合解消の概要」を参照してください。


注意:

一般的なOracle Streamsレプリケーション環境には、他にn-way環境があります。「n-wayレプリケーション環境の概要」を参照してください。 


参照:

 

チュートリアル: ローカル取得プロセスを使用した2データベース・レプリケーションの構成

この例では、hrスキーマにあるすべての表に、データ操作言語(DML)変更をレプリケートするOracle Streamsレプリケーション環境を構成します。この例では、変更を取得するローカル取得プロセスを使用して2データベース・レプリケーション環境を構成します。この例では、グローバル・データベース名db1.example.comおよびdb2.example.comを使用します。ただし、例を完了するために、ご使用の環境のデータベースに置き換えることもできます。2データベース・レプリケーション環境の詳細は、「2データベース・レプリケーション環境の概要」を参照してください。

この例では、DBMS_STREAMS_ADMパッケージのMAINTAIN_SCHEMASプロシージャを使用して2データベース・レプリケーション環境を構成します。このプロシージャは、1つ以上のスキーマをレプリケートするOracle Streams環境を構成する最速で最も単純な方法です。また、プロシージャはOracle Streamsレプリケーション環境に対して設定されたベスト・プラクティスに従います。

レプリケーション用に構成されているデータベース・オブジェクトは、MAINTAIN_SCHEMASプロシージャの実行時に、宛先データベースに存在する場合としない場合があります。宛先データベースにデータベース・オブジェクトが存在しない場合、MAINTAIN_SCHEMASプロシージャはデータ・ポンプ・エクスポート/インポートを使用して、宛先データベースでデータベース・オブジェクトをインスタンス化します。インスタンス化の際に、これらのデータベース・オブジェクトにインスタンス化SCNが設定されます。宛先データベースにデータベース・オブジェクトが存在する場合、MAINTAIN_SCHEMASプロシージャは既存のデータベース・オブジェクトを保持して、インスタンス化SCNを設定します。この例では、MAINTAIN_SCHEMASプロシージャを実行する前に、db1.example.comデータベースおよびdb2.example.comデータベースの両方にhrスキーマが存在しています。

この例では、単方向レプリケーションまたは双方向レプリケーションの構成方法を示しています。双方向レプリケーションを構成するには、追加の手順を実行して、構成プロシージャの実行時にbi_directionalパラメータをTRUEに設定する必要があります。

図4-11に、この例で作成した環境の概要を示します。双方向レプリケーションに必要な追加のコンポーネントはグレーで表示され、そのアクションは破線で示されています。

図4-11    ローカル取得プロセスを使用した2データベース・レプリケーション環境


画像の説明

2データベース・レプリケーション環境を構成するには:
  1. 2データベース・レプリケーション環境を準備するには、次のタスクを完了します。

    1. db1.example.comデータベースがdb2.example.comデータベースと通信できるように、ネットワーク接続を構成します。

      データベース間のネットワーク接続の構成の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

    2. レプリケーション環境に参加する各データベースでOracle Streams管理者を構成します。方法については、「チュートリアル: Oracle Streams管理者の作成」を参照してください。この例では、Oracle Streams管理者がstrmadminであると想定します。

    3. db1.example.comデータベースからdb2.example.comデータベースへのデータベース・リンクを作成します。

      データベース・リンクは、Oracle Streams管理者のスキーマに作成する必要があります。また、データベース・リンクは別のデータベースでOracle Streams管理者に接続する必要があります。データベース・リンクの名前およびサービス名は、どちらもdb2.example.comである必要があります。詳細は、「チュートリアル: データベース・リンクの作成」を参照してください。

    4. ARCHIVELOGモードで実行するようにdb1.example.comデータベースを構成します。取得プロセスがソース・データベースで生成された変更を取得するには、ソース・データベースをARCHIVELOGモードで実行する必要があります。ARCHIVELOGモードで実行するためのデータベースの構成の詳細は、『Oracle Database管理者ガイド』を参照してください。

  2. 双方向レプリケーション環境を構成するには、次の手順を実行します。単方向レプリケーション環境を構成する場合は、これらの手順は不要なため、手順3に進みます。

    1. db2.example.comデータベースからdb1.example.comデータベースへのデータベース・リンクを作成します。

      データベース・リンクは、Oracle Streams管理者のスキーマに作成する必要があります。また、データベース・リンクは別のデータベースでOracle Streams管理者に接続する必要があります。データベース・リンクの名前およびサービス名は、どちらもdb1.example.comである必要があります。詳細は、「チュートリアル: データベース・リンクの作成」を参照してください。

    2. ARCHIVELOGモードで実行するようにdb2.example.comデータベースを構成します。取得プロセスがソース・データベースで生成された変更を取得するには、ソース・データベースをARCHIVELOGモードで実行する必要があります。ARCHIVELOGモードで実行するためのデータベースの構成の詳細は、『Oracle Database管理者ガイド』を参照してください。

  3. Oracle Streamsレプリケーション環境に参加する各データベースで初期化パラメータを正しく設定します。方法については、「Oracle Streamsレプリケーションの準備」を参照してください。

  4. コマンドラインでSQL*Plusを開き、Oracle Streams管理者としてdb2.example.comデータベースに接続します。

    SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

  5. MAINTAIN_SCHEMASプロシージャで生成されるファイル(インスタンス化に使用するデータ・ポンプ・エクスポート・ダンプ・ファイルを含む)を保持するディレクトリ・オブジェクトを作成します。ディレクトリ・オブジェクトは、コンピュータ・システム上の任意のアクセス可能ディレクトリを指すことができます。たとえば、次の文は、/usr/db2_log_filesディレクトリを指すdb2_dirという名前のディレクトリ・オブジェクトを作成します。

    CREATE DIRECTORY db2_dir AS '/usr/db2_log_files';
    
    
  6. SQL*Plusで、db1.example.comデータベースにOracle Streams管理者として接続します。

    SQL*Plusでのデータベースへの接続の詳細は、『Oracle Database管理者ガイド』を参照してください。

  7. MAINTAIN_SCHEMASプロシージャで生成されるファイル(インスタンス化に使用するデータ・ポンプ・エクスポート・ダンプ・ファイルを含む)を保持するディレクトリ・オブジェクトを作成します。ディレクトリ・オブジェクトは、コンピュータ・システム上の任意のアクセス可能ディレクトリを指すことができます。たとえば、次の文は、/usr/db1_log_filesディレクトリを指すdb1_dirという名前のディレクトリ・オブジェクトを作成します。

    CREATE DIRECTORY db1_dir AS '/usr/db1_log_files';
    
    
  8. MAINTAIN_SCHEMASプロシージャを実行して、db1.example.comデータベースとdb2.example.comデータベース間でhrスキーマのレプリケーションを構成します。

    bi_directionalパラメータが、構成するレプリケーション環境用に適切に設定されていることを確認します。このパラメータは、単方向レプリケーションを構成する場合はFALSEに、双方向レプリケーションを構成する場合はTRUEに設定します。

    BEGIN
      DBMS_STREAMS_ADM.MAINTAIN_SCHEMAS(
        schema_names                 => 'hr',
        source_directory_object      => 'db1_dir',
        destination_directory_object => 'db2_dir',
        source_database              => 'db1.example.com',
        destination_database         => 'db2.example.com',
        bi_directional               => FALSE); -- Set to TRUE for bi-directional
    END;
    /
    
    

    MAINTAIN_SCHEMASプロシージャは、多くの構成タスクを実行するため時間がかかることがあります。プロシージャの実行中は、宛先データベースのレプリケートされたデータベース・オブジェクトにデータ操作言語(DML)またはデータ定義言語(DLL)変更が行われないようにしてください。「Oracle Streamsレプリケーションの構成プロシージャの概要」を参照してください。

    構成プロシージャを実行すると、進捗情報がDBA_RECOVERABLE_SCRIPTDBA_RECOVERABLE_SCRIPT_PARAMSDBA_RECOVERABLE_SCRIPT_BLOCKSおよびDBA_RECOVERABLE_SCRIPT_ERRORSデータ・ディクショナリ・ビューに記録されます。プロシージャがエラーによって停止した場合は、DBMS_STREAMS_ADMパッケージ内のRECOVER_OPERATIONプロシージャの使用方法について、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

  9. 双方向レプリケーションを構成する場合は、両方のデータベースでhrスキーマ内のすべての表に対して最新時刻の競合解消を構成します。このスキーマには、countriesdepartmentsemployeesjobsjob_historylocationsおよびregions表が含まれます。方法については、「チュートリアル: 表の最新時刻競合解消の構成」を参照してください。

例を完了すると、次の特性を持つ2データベース・レプリケーション環境が構成されます。

Oracle Streamsレプリケーション構成を確認するには:
  1. db1.example.comデータベースで、取得プロセスが有効化され、取得タイプがローカルであることを確認します。確認には、「取得プロセスの情報の表示」の手順に従って、「取得」サブページで「ステータス」および「取得タイプ」フィールドを確認します。

  2. db1.example.comデータベースで、伝播が有効化されていることを確認します。確認には、「伝播の情報の表示」の手順に従って、「伝播」サブページで「ステータス」フィールドを確認します。

  3. db2.example.comデータベースで、適用プロセスが有効化されていることを確認します。確認には、「適用プロセスの情報の表示」の手順に従って、「適用」サブページで「ステータス」フィールドを確認します。

  4. 双方向レプリケーションを構成した場合は、次の手順を実行します。

    1. db2.example.comデータベースで、取得プロセスが有効化され、取得タイプがローカルであることを確認します。

    2. db2.example.comデータベースで、伝播が有効化されていることを確認します。

    3. db1.example.comデータベースで、適用プロセスが有効化されていることを確認します。

変更をレプリケートするには:
  1. hrスキーマに対する変更を取得するデータベースで、DML変更をhrスキーマのすべての表に対して行います。この例では、db1.example.comデータベースがhrスキーマに対する変更を取得しています。双方向レプリケーションを構成した場合は、db2.example.comhrスキーマに対する変更を取得します。

  2. 変更のレプリケーションが完了するまで待ってから、SQL*Plusを使用して他のデータベースで変更された表を問い合せてDML変更を表示します。


    注意:

    DBMS_STREAMS_ADMパッケージの構成プロシージャは、宛先データベースで読取り専用になるレプリケート表を構成しません。単方向レプリケーションでこれらの表を読取り専用にする必要がある場合、宛先データベースで権限を構成します。ただし、適用プロセスの適用ユーザーは、レプリケートされたデータベース・オブジェクトに対するDML変更が可能である必要があります。この例では、適用ユーザーはOracle Streams管理者です。権限の構成の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。 


    参照:

     

チュートリアル: ダウンストリーム取得プロセスを使用した2データベース・レプリケーションの構成

この項の例では、hrスキーマにあるすべての表に、データ操作言語(DML)変更をレプリケートするOracle Streamsレプリケーション環境を構成します。この例では、宛先データベースでダウンストリーム取得プロセスを使用して2データベース・レプリケーション環境を構成します。この例では、グローバル・データベース名src.example.comおよびdest.example.comを使用します。ただし、例を完了するために、ご使用の環境のデータベースに置き換えることもできます。2データベース・レプリケーション環境の詳細は、「2データベース・レプリケーション環境の概要」を参照してください。

この例では、ダウンストリーム取得プロセスは宛先データベースdest.example.comで実行されます。したがって、変更の取得に必要なリソースはソース・データベースsrc.example.comで解放されます。この例では、アーカイブ・ログ・ダウンストリーム取得プロセスではなく、リアルタイム・ダウンストリーム取得プロセスを構成します。リアルタイム・ダウンストリーム取得は、ソース・データベースでの変更の取得に必要な時間を短縮できるという利点があります。時間を短縮できるのは、データを取得する前にREDOログ・ファイルがアーカイブされるまで待つ必要がないためです。

この例では、レプリケートされたデータベース・オブジェクトが宛先データベースでレポートおよび分析に使用されると想定しています。このため、これらのデータベース・オブジェクトは、dest.example.comデータベースでは読取り専用であると想定しています。

この例では、DBMS_STREAMS_ADMパッケージのMAINTAIN_SCHEMASプロシージャを使用して2データベース・レプリケーション環境を構成します。このプロシージャは、1つ以上のスキーマをレプリケートするOracle Streams環境を構成する最速で最も単純な方法です。また、プロシージャはOracle Streamsレプリケーション環境に対して設定されたベスト・プラクティスに従います。

レプリケーション用に構成されているデータベース・オブジェクトは、MAINTAIN_SCHEMASプロシージャの実行時に、宛先データベースに存在する場合としない場合があります。宛先データベースにデータベース・オブジェクトが存在しない場合、MAINTAIN_SCHEMASプロシージャはデータ・ポンプ・エクスポート/インポートを使用して、宛先データベースでデータベース・オブジェクトをインスタンス化します。インスタンス化の際に、これらのデータベース・オブジェクトにインスタンス化SCNが設定されます。宛先データベースにデータベース・オブジェクトが存在する場合、MAINTAIN_SCHEMASプロシージャは既存のデータベース・オブジェクトを保持して、インスタンス化SCNを設定します。この例では、MAINTAIN_SCHEMASプロシージャを実行する前に、src.example.comデータベースおよびdest.example.comデータベースの両方にhrスキーマが存在しています。

図4-12に、この例で作成する環境の概要を示します。

図4-12    ダウンストリーム取得プロセスを使用した2データベース・レプリケーション環境


画像の説明


注意:

ローカル取得プロセスでは、ダウンストリーム取得プロセスに比べ、プラットフォームまたはOracle Databaseのバージョンが異なるレプリケーション環境においてより高い柔軟性が提供されます。詳細は、『Oracle Streams概要および管理』を参照してください。 


2データベース・レプリケーション環境を構成するには:
  1. 2データベース・レプリケーション環境を準備するには、次のタスクを完了します。

    1. src.example.comデータベースとdest.example.comデータベースが相互に通信できるように、ネットワーク接続を構成します。

      データベース間のネットワーク接続の構成の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

    2. レプリケーション環境に参加する各データベースでOracle Streams管理者を構成します。方法については、「チュートリアル: Oracle Streams管理者の作成」を参照してください。この例では、Oracle Streams管理者がstrmadminであると想定します。

    3. ソース・データベースから宛先データベース、および宛先データベースからソース・データベースへのデータベース・リンクを作成します。この例では、次のデータベース・リンクを作成します。

      • src.example.comデータベースからdest.example.comデータベースへ。データベース・リンクの名前とサービス名は、どちらもdest.example.comである必要があります。

      • dest.example.comデータベースからsrc.example.comデータベースへ。データベース・リンクの名前とサービス名は、どちらもsrc.example.comである必要があります。

      src.example.comは、dest.example.comデータベースにおけるダウンストリーム取得プロセスのソース・データベースなので、dest.example.comデータベースからsrc.example.comデータベースへのデータベース・リンクが必要となります。このデータベース・リンクは取得プロセスの作成および構成を簡略化します。

      各データベース・リンクは、Oracle Streams管理者のスキーマに作成する必要があります。また、各データベース・リンクは、他のデータベースでOracle Streams管理者に接続する必要があります。方法については、「チュートリアル: データベース・リンクの作成」を参照してください。

    4. Oracle Streamsレプリケーション環境に参加する各データベースで初期化パラメータを正しく設定します。方法については、「Oracle Streamsレプリケーションの準備」を参照してください。

    5. ARCHIVELOGモードで実行するように両方のデータベースを構成します。ダウンストリーム取得プロセスがソース・データベースで生成された変更を取得するには、ソース・データベースとダウンストリーム取得データベースをARCHIVELOGモードで実行する必要があります。この例では、src.example.comおよびdest.example.comデータベースをARCHIVELOGモードで実行する必要があります。ARCHIVELOGモードで実行するためのデータベースの構成の詳細は、『Oracle Database管理者ガイド』を参照してください。

    6. REDOデータの転送をサポートするために、両方のデータベースで認証を構成します。

      REDO転送セッションは、Secure Sockets Layer(SSL)プロトコルまたはリモート・ログイン・パスワード・ファイルのいずれかを使用して認証されます。ソース・データベースにリモート・ログイン・パスワード・ファイルがある場合は、それをダウンストリーム取得データベース・システムの適切なディレクトリにコピーします。パスワード・ファイルは、ソース・データベースおよびダウンストリーム取得データベースで同じである必要があります。

      この例で、ソース・データベースはsrc.example.comで、ダウンストリーム取得データベースはdest.example.comです。REDO転送の認証要件の詳細は、『Oracle Data Guard概要および管理』を参照してください。

  2. ソース・データベースsrc.example.comで次の初期化パラメータを設定し、REDOデータがソース・データベースのオンラインREDOログからダウンストリーム・データベースdest.example.comのスタンバイREDOログに転送されるようにREDO転送サービスを構成します。

    • ソース・データベースで、REDOデータがダウンストリーム・データベースに転送されるようにLOG_ARCHIVE_DEST_n初期化パラメータを1つ以上構成します。これを行うには、このパラメータに次の属性を設定します。

      • SERVICE: ダウンストリーム・データベースのネットワーク・サービス名を指定します。

      • ASYNCまたはSYNC: REDO転送モードを指定します。

        ASYNCを指定するメリットは、ソース・データベースのパフォーマンスにほとんど影響を与えないことです。ソース・データベースでOracle Database 10gリリース1以上が実行されていて、ダウンストリーム・データベースまたはネットワークのパフォーマンスが低いときは、ASYNCを使用してソース・データベースのパフォーマンスへの影響を回避することをお薦めします。

        SYNCを指定するメリットは、ASYNCを指定する場合と比べて、ダウンストリーム・データベースにREDOデータが速く送信されることです。また、SYNC AFFIRMを指定すると、MAXIMUM AVAILABILITYスタンバイ保護モードの場合と同様に動作するようになります。SQL文ALTER DATABASE STANDBY DATABASE TO MAXIMIZE AVAILABILITYを指定しても、Oracle Streams取得プロセスには影響しないことに注意してください。

      • NOREGISTER: この属性は、アーカイブREDOログ・ファイルの場所がダウンストリーム・データベース制御ファイルに記録されないように指定します。

      • VALID_FOR: (ONLINE_LOGFILE,PRIMARY_ROLE)または(ONLINE_LOGFILE,ALL_ROLES)を指定します。

      • DB_UNIQUE_NAME: ダウンストリーム・データベースの一意の名前です。ダウンストリーム・データベースでDB_UNIQUE_NAME初期化パラメータに指定した名前を使用します。

      次に、ダウンストリーム・データベースを指定するLOG_ARCHIVE_DEST_n設定の例を示します。

      LOG_ARCHIVE_DEST_2='SERVICE=DEST.EXAMPLE.COM ASYNC NOREGISTER
         VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
         DB_UNIQUE_NAME=dest'
      
      
    • LOG_ARCHIVE_DEST_STATE_n: ソース・データベースで、ダウンストリーム・データベースのLOG_ARCHIVE_DEST_nパラメータに対応する初期化パラメータをENABLEに設定します。

      たとえば、ダウンストリーム・データベースにLOG_ARCHIVE_DEST_2初期化パラメータが設定されている場合、LOG_ARCHIVE_DEST_STATE_2パラメータを次のように設定します。

      LOG_ARCHIVE_DEST_STATE_2=ENABLE 
      
      
    • LOG_ARCHIVE_CONFIG: この初期化パラメータのDB_CONFIG属性を設定して、ソース・データベースおよびダウンストリーム・データベースのDB_UNIQUE_NAMEを含めます。

      たとえば、ソース・データベースのDB_UNIQUE_NAMEsrcで、ダウンストリーム・データベースのDB_UNIQUE_NAMEdestの場合、次のパラメータを指定します。

      LOG_ARCHIVE_CONFIG='DG_CONFIG=(src,dest)'
      
      

      デフォルトでは、LOG_ARCHIVE_CONFIGパラメータによって、データベースでのREDOの送受信が可能になります。

      参照:

      初期化パラメータの詳細は、『Oracle Databaseリファレンス』および『Oracle Data Guard概要および管理』を参照してください。 

  3. ダウンストリーム・データベースdest.example.comで、次の初期化パラメータを設定し、ローカルに生成されるREDOデータのアーカイブを構成します。

    • LOG_ARCHIVE_DEST_n初期化パラメータで、少なくとも1つのアーカイブ・ログの保存先を、ダウンストリーム・データベースを実行しているコンピュータ・システム上のディレクトリまたはフラッシュ・リカバリ領域に設定します。これを設定するには、このパラメータの次の属性を設定します。

      • LOCATION: ディスク・ディレクトリへの有効なパス名またはUSE_DB_RECOVERY_FILE_DESTを指定します。LOCATION属性に指定する各宛先に、一意のディレクトリ・パス名またはUSE_DB_RECOVERY_FILE_DESTを指定する必要があります。これは、ローカル・データベースで生成されるアーカイブREDOログ・ファイルのローカルの宛先です。

      • VALID_FOR: (ONLINE_LOGFILE,PRIMARY_ROLE)または(ONLINE_LOGFILE,ALL_ROLES)を指定します。

      次の例は、リアルタイム・ダウンストリーム取得データベースでローカルに生成されるREDOデータに対するLOG_ARCHIVE_DEST_n設定です。

      LOG_ARCHIVE_DEST_1='LOCATION=/home/arc_dest/local_rl
         VALID_FOR=(ONLINE_LOGFILE,PRIMARY_ROLE)'
      
      

      リアルタイム・ダウンストリーム取得構成では、アーカイブ・スタンバイREDOログ・ファイルをダウンストリーム・データベースからのアーカイブ・オンラインREDOログ・ファイルとは別に保持する必要があります。これを実現するには、VALID_FOR属性のREDOログ・タイプにALL_LOGFILESではなくてONLINE_LOGFILEを指定します。

      必要に応じて、LOG_ARCHIVE_DEST_n初期化パラメータの他の属性も指定できます。

    • この手順で設定済のLOG_ARCHIVE_DEST_nパラメータに対応するLOG_ARCHIVE_DEST_STATE_n初期化パラメータをENABLEに設定します。

      たとえば、LOG_ARCHIVE_DEST_1初期化パラメータが設定されている場合、LOG_ARCHIVE_DEST_STATE_1パラメータを次のように設定します。

      LOG_ARCHIVE_DEST_STATE_1=ENABLE 
      
      
  4. ダウンストリーム・データベースdest.example.comで、ダウンストリーム・データベースがソース・データベースからREDOデータを受信し、ダウンストリーム・データベースのスタンバイREDOログにそのREDOデータを書き込むように、次の初期化パラメータを設定します。

    • LOG_ARCHIVE_DEST_n初期化パラメータで、少なくとも1つのアーカイブ・ログの保存先を、ダウンストリーム・データベースを実行しているコンピュータ・システム上のディレクトリまたはフラッシュ・リカバリ領域に設定します。これを設定するには、このパラメータの次の属性を設定します。

      • LOCATION: ディスク・ディレクトリへの有効なパス名またはUSE_DB_RECOVERY_FILE_DESTを指定します。LOCATION属性に指定する各宛先に、一意のディレクトリ・パス名またはUSE_DB_RECOVERY_FILE_DESTを指定する必要があります。これは、スタンバイREDOログから書き込まれたアーカイブREDOログ・ファイルのローカルの宛先です。リモート・ソース・データベースからのログ・ファイルは、ローカル・データベースのログ・ファイルとは別に保持する必要があります。

      • VALID_FOR: (STANDBY_LOGFILE,PRIMARY_ROLE)または(STANDBY_LOGFILE,ALL_ROLES)を指定します。

      次の例は、リアルタイム・ダウンストリーム取得データベースでのLOG_ARCHIVE_DEST_n設定です。

      LOG_ARCHIVE_DEST_2='LOCATION=/home/arc_dest/srl_src1
         VALID_FOR=(STANDBY_LOGFILE,PRIMARY_ROLE)'
      
      

      必要に応じて、LOG_ARCHIVE_DEST_n初期化パラメータの他の属性も指定できます。

    • この手順で設定済のLOG_ARCHIVE_DEST_nパラメータに対応するLOG_ARCHIVE_DEST_STATE_n初期化パラメータをENABLEに設定します。

      たとえば、ダウンストリーム・データベースにLOG_ARCHIVE_DEST_2初期化パラメータが設定されている場合、LOG_ARCHIVE_DEST_STATE_2パラメータを次のように設定します。

      LOG_ARCHIVE_DEST_STATE_2=ENABLE 
      
      
    • LOG_ARCHIVE_CONFIG: この初期化パラメータのDB_CONFIG属性を設定して、ソース・データベースおよびダウンストリーム・データベースのDB_UNIQUE_NAMEを含めます。

      たとえば、ソース・データベースのDB_UNIQUE_NAMEsrcで、ダウンストリーム・データベースのDB_UNIQUE_NAMEdestの場合、次のパラメータを指定します。

      LOG_ARCHIVE_CONFIG='DG_CONFIG=(src,dest)'
      
      

      デフォルトでは、LOG_ARCHIVE_CONFIGパラメータによって、データベースでのREDOの送受信が可能になります。

  5. 手順23または4で、データベースのインスタンスが実行中に初期化パラメータをリセットした場合、該当する初期化パラメータ・ファイルでもそれをリセットすれば、データベースの再起動時に新しい値が維持されます。

    手順23または4で、インスタンスの実行中には初期化パラメータをリセットしなかったが、初期化パラメータ・ファイルでリセットした場合は、データベースを再起動します。ソース・データベースのグローバル名は、ソース・データベースがオープンな場合にのみダウンストリーム・データベースに送信されるため、ダウンストリーム・データベースにREDOデータを送信するときには、ソース・データベースがオープンである必要があります。

  6. ダウンストリーム・データベースdest.example.comで、管理ユーザーとして接続してスタンバイREDOログ・ファイルを作成します。


    注意:

    次に示すのは、スタンバイREDOログ・ファイルをダウンストリーム・データベースに追加する一般的な手順の概略です。スタンバイREDOログ・ファイルの追加に使用する実際の手順とSQL文は、環境によって異なります。たとえば、Oracle Real Application Clusters(Oracle RAC)環境では手順が異なります。スタンバイREDOログ・ファイルをデータベースに追加する手順の詳細は、『Oracle Data Guard概要および管理』を参照してください。 


    1. SQL*Plusを開き、管理ユーザーとしてソース・データベースsrc.example.comに接続します。

      たとえば、管理ユーザーとしてsrc.example.comデータベースに接続するには、次のようにします。

      sqlplus system@src.example.com
      Enter password: password
      
      

      SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

    2. ソース・データベースsrc.example.comで使用するログ・ファイルのサイズを決定します。スタンバイ・ログ・ファイルのサイズは、ソース・データベースのログ・ファイル・サイズと正確に同じかそれより大きくなるようにします。たとえば、ソース・データベースのログ・ファイル・サイズが500MBの場合、スタンバイ・ログ・ファイルのサイズも500MB以上にします。ソース・データベースにおけるREDOログ・ファイルのサイズ(バイト単位)は、ソース・データベースでV$LOGビューを問い合せて確認することができます。

      たとえば、次のようにV$LOGビューを問い合せます。

      SELECT BYTES FROM V$LOG;
      
      
    3. ダウンストリーム・データベースdest.example.comで必要なスタンバイ・ログ・ファイル・グループの数を決定します。スタンバイ・ログ・ファイル・グループの数は、ソース・データベースでのオンライン・ログ・ファイル・グループの数より1以上大きくする必要があります。たとえば、ソース・データベースに2つのオンライン・ログ・ファイル・グループがある場合、ダウンストリーム・データベースには少なくとも3つのスタンバイ・ログ・ファイル・グループが必要です。ソース・データベースのオンライン・ログ・ファイル・グループの数は、ソース・データベースでV$LOGビューを問い合せて確認することができます。

      たとえば、SQL*Plusで管理ユーザーとしてまだsrc.example.comに接続している状態で、次のようにV$LOGビューを問い合せます。

      SELECT COUNT(GROUP#) FROM V$LOG;
      
      
    4. SQL*Plusで、管理ユーザーとしてダウンストリーム・データベースdest.example.comに接続します。

      CONNECT system@dest.example.com
      Enter password: password
      
      
    5. SQL文、ALTER DATABASE ADD STANDBY LOGFILEを使用して、ダウンストリーム・データベースdest.example.comにスタンバイ・ログ・ファイル・グループを追加します。

      たとえば、ソース・データベースに2つのオンラインREDOログ・ファイル・グループがあり、ログ・ファイルのサイズが500MBであるとします。この場合、次の文を使用して適切なスタンバイ・ログ・ファイル・グループを作成します。

      ALTER DATABASE ADD STANDBY LOGFILE GROUP 3
         ('/oracle/dbs/slog3a.rdo', '/oracle/dbs/slog3b.rdo') SIZE 500M;
      
      ALTER DATABASE ADD STANDBY LOGFILE GROUP 4
         ('/oracle/dbs/slog4a.rdo', '/oracle/dbs/slog4b.rdo') SIZE 500M;
      
      ALTER DATABASE ADD STANDBY LOGFILE GROUP 5
         ('/oracle/dbs/slog5a.rdo', '/oracle/dbs/slog5b.rdo') SIZE 500M;
      
      
    6. dest.example.comで次の問合せを実行し、スタンバイ・ログ・ファイル・グループが正常に追加されたことを確認します。

      SELECT GROUP#, THREAD#, SEQUENCE#, ARCHIVED, STATUS
         FROM V$STANDBY_LOG;
      
      

      出力は次のようになります。

          GROUP#    THREAD#  SEQUENCE# ARC STATUS
      ---------- ---------- ---------- --- ----------
               3          0          0 YES UNASSIGNED
               4          0          0 YES UNASSIGNED
               5          0          0 YES UNASSIGNED
      
      
    7. ソース・データベースのログ・ファイルが、手順4LOCATION属性に指定したディレクトリに表示されることを確認します。ディレクトリ内のファイルを表示するために、ソース・データベースにあるログ・ファイルを切り替える必要がある場合があります。

  7. SQL*Plusで、src.example.comデータベースにOracle Streams管理者として接続します。

    SQL*Plusでのデータベースへの接続の詳細は、『Oracle Database管理者ガイド』を参照してください。

  8. MAINTAIN_SCHEMASプロシージャで生成されるファイル(インスタンス化に使用するデータ・ポンプ・エクスポート・ダンプ・ファイルを含む)を保持するディレクトリ・オブジェクトを作成します。ディレクトリ・オブジェクトは、コンピュータ・システム上の任意のアクセス可能ディレクトリを指すことができます。たとえば、次の文は、/usr/src_log_filesディレクトリを指すsrc_dirという名前のディレクトリ・オブジェクトを作成します。

    CREATE DIRECTORY src_dir AS '/usr/src_log_files';
    
    
  9. SQL*Plusで、dest.example.comデータベースにOracle Streams管理者として接続します。

  10. MAINTAIN_SCHEMASプロシージャで生成されるファイル(インスタンス化に使用するデータ・ポンプ・エクスポート・ダンプ・ファイルを含む)を保持するディレクトリ・オブジェクトを作成します。ディレクトリ・オブジェクトは、コンピュータ・システム上の任意のアクセス可能ディレクトリを指すことができます。たとえば、次の文は、/usr/dest_log_filesディレクトリを指すdest_dirという名前のディレクトリ・オブジェクトを作成します。

    CREATE DIRECTORY dest_dir AS '/usr/dest_log_files';
    
    
  11. dest.example.comデータベースにまだOracle Streams管理者として接続しているときに、MAINTAIN_SCHEMASプロシージャを実行してsrc.example.comデータベースとdest.example.comデータベース間のレプリケーションを構成します。

    BEGIN
      DBMS_STREAMS_ADM.MAINTAIN_SCHEMAS(
        schema_names                 => 'hr',
        source_directory_object      => 'src_dir',
        destination_directory_object => 'dest_dir',
        source_database              => 'src.example.com',
        destination_database         => 'dest.example.com',
        capture_name                 => 'capture',
        capture_queue_table          => 'streams_queue_qt',
        capture_queue_name           => 'streams_queue',
        apply_name                   => 'apply',
        apply_queue_table            => 'streams_queue_qt',
        apply_queue_name             => 'streams_queue');
    END;
    /
    
    

    MAINTAIN_SCHEMASプロシージャは、多くの構成タスクを実行するため時間がかかることがあります。プロシージャの実行中は、宛先データベースのレプリケートされたデータベース・オブジェクトにデータ操作言語(DML)またはデータ定義言語(DLL)変更が行われないようにしてください。

    MAINTAIN_SCHEMASプロシージャで必要なパラメータは、schema_namessource_directory_objectdestination_directory_objectsource_databaseおよびdestination_databaseです。「Oracle Streamsレプリケーションの構成プロシージャの概要」を参照してください。

    この例では、取得プロセス、取得プロセスのキュー表、取得プロセスのキュー、適用プロセス、適用プロセスのキュー表および適用プロセスのキューの名前を選択できることを示すために他のパラメータを指定しています。これらのパラメータを指定しないと、システムで生成された名前が使用されます。

    構成プロシージャを使用してダウンストリーム取得を構成する際は、キューおよびキュー表の名前を指定するパラメータは重要です。このような構成では、キュー間で変更が伝播されないようにするために、取得プロセスおよび適用プロセスがダウンストリーム取得プロセスで同じキューを使用するとより効率的です。このサンプル構成の効率を向上させるために、capture_queue_nameおよびapply_queue_nameパラメータの両方にstreams_queueが指定されていることに注意してください。また、capture_queue_tableおよびapply_queue_tableパラメータの両方にstreams_queue_qtが指定されています。

    構成プロシージャを実行すると、進捗情報がDBA_RECOVERABLE_SCRIPTDBA_RECOVERABLE_SCRIPT_PARAMSDBA_RECOVERABLE_SCRIPT_BLOCKSおよびDBA_RECOVERABLE_SCRIPT_ERRORSデータ・ディクショナリ・ビューに記録されます。プロシージャがエラーによって停止した場合は、DBMS_STREAMS_ADMパッケージ内のRECOVER_OPERATIONプロシージャの使用方法について、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

    プロシージャが正常に完了してから、次の手順を実行します。

  12. dest.example.comデータベースにまだOracle Streams管理者として接続しているときに、downstream_real_time_mine取得プロセスのパラメータをYに設定します。

    BEGIN
      DBMS_CAPTURE_ADM.SET_PARAMETER(
        capture_name => 'capture',
        parameter    => 'downstream_real_time_mine',
        value        => 'Y');
    END;
    /
    
    

    取得プロセスのパラメータの設定にEnterprise Managerを使用する方法については、「取得プロセスのパラメータの設定」を参照してください。

  13. SQL*Plusで、管理ユーザーとしてソース・データベースsrc.example.comに接続します。

  14. ソース・データベースで現行のログ・ファイルを次のようにアーカイブします。

    ALTER SYSTEM ARCHIVE LOG CURRENT;
    
    

    ソース・データベースで現行のログ・ファイルをアーカイブすると、ソース・データベースのREDOログのリアルタイム・マイニングが開始されます。

例を完了すると、次の特性を持つ2データベース・レプリケーション環境が構成されます。

Oracle Streamsレプリケーション構成を確認するには:
  1. dest.example.comデータベースで、取得プロセスが有効化され、取得タイプがダウンストリームであることを確認します。確認には、「取得プロセスの情報の表示」の手順に従って、「取得」サブページで「ステータス」および「取得タイプ」フィールドを確認します。

  2. dest.example.comデータベースで、適用プロセスが有効化されていることを確認します。確認には、「適用プロセスの情報の表示」の手順に従って、「適用」サブページで「ステータス」フィールドを確認します。

変更をレプリケートするには:
  1. src.example.comデータベースで、hrスキーマの任意の表に対してDML変更を行った後、変更をコミットします。

  2. 変更のレプリケーションが完了するまで待ってから、SQL*Plusを使用してdest.example.comデータベースで変更された表を問い合せてDML変更を表示します。


    注意:

    DBMS_STREAMS_ADMパッケージの構成プロシージャは、宛先データベースで読取り専用になるレプリケート表を構成しません。これらの表を読取り専用にする必要がある場合、宛先データベースで権限を構成します。ただし、適用プロセスの適用ユーザーは、レプリケートされたデータベース・オブジェクトに対するDML変更が可能である必要があります。この例では、適用ユーザーはOracle Streams管理者です。権限の構成の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。 


    参照:

     

チュートリアル: ローカル取得プロセスでのハブアンドスポーク・レプリケーションの構成

この項の例では、hrスキーマにあるすべての表に、データ操作言語(DML)変更をレプリケートするOracle Streamsハブアンドスポーク・レプリケーション環境を構成します。この例では、各データベースで取得プロセスを使用してこれらの変更を取得します。ハブアンドスポーク・レプリケーションとは、中央のハブ・データベースが1つ以上のスポーク・データベースでの変更をレプリケートすることを意味します。スポーク・データベースは、相互に直接通信しません。このサンプル構成では、ハブ・データベースが、1つのスポーク・データベースで生成された変更を他のスポーク・データベースに送信します。ハブアンドスポーク・レプリケーション環境の詳細は、「ハブアンドスポーク・レプリケーション環境の概要」を参照してください。

この例では、DBMS_STREAMS_ADMパッケージのMAINTAIN_SCHEMASプロシージャを使用してハブアンドスポーク・レプリケーション環境を構成します。このプロシージャは、1つ以上のスキーマをレプリケートするOracle Streams環境を構成する最速で最も単純な方法です。また、プロシージャはOracle Streamsレプリケーション環境に対して設定されたベスト・プラクティスに従います。

この例では、ハブ・データベースのグローバル名はhub.example.com、スポーク・データベースのグローバル名はspoke1.example.comおよびspoke2.example.comです。ただし、使用している環境のデータベースをかわりに使用して例を完了することができます。

レプリケーション用に構成されているデータベース・オブジェクトは、MAINTAIN_SCHEMASプロシージャの実行時に、宛先データベースに存在する場合としない場合があります。宛先データベースにデータベース・オブジェクトが存在しない場合、MAINTAIN_SCHEMASプロシージャはデータ・ポンプ・エクスポート/インポートを使用して、宛先データベースでデータベース・オブジェクトをインスタンス化します。インスタンス化の際に、これらのデータベース・オブジェクトにインスタンス化SCNが設定されます。宛先データベースにデータベース・オブジェクトが存在する場合、MAINTAIN_SCHEMASプロシージャは既存のデータベース・オブジェクトを保持して、インスタンス化SCNを設定します。この例では、MAINTAIN_SCHEMASプロシージャを実行する前に、各データベースにhrスキーマが存在しています。

図4-13に、この例で作成する環境の概要を示します。

図4-13    取得プロセスと読取り/書込みスポークを持つハブアンドスポーク環境の例


画像の説明

読取り/書込みスポークのあるこのハブアンドスポーク・レプリケーション環境を構成するには:
  1. ハブアンドスポーク・レプリケーション環境を準備するには、次のタスクを完了します。

    1. 次のデータベースが相互に通信できるように、ネットワーク接続を構成します。

      • hub.example.comデータベースとspoke1.example.comデータベース

      • hub.example.comデータベースとspoke2.example.comデータベース

      データベース間のネットワーク接続の構成の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

    2. レプリケーション環境に参加する各データベースでOracle Streams管理者を構成します。方法については、「チュートリアル: Oracle Streams管理者の作成」を参照してください。この例では、Oracle Streams管理者がstrmadminであると想定します。

    3. ハブ・データベースから各スポーク・データベースおよび各スポーク・データベースからハブ・データベースへのデータベース・リンクを作成します。この例では、次のデータベース・リンクを作成します。

      • hub.example.comデータベースからspoke1.example.comデータベースへ。データベース・リンクの名前とサービス名は、どちらもspoke1.example.comである必要があります。

      • hub.example.comデータベースからspoke2.example.comデータベースへ。データベース・リンクの名前とサービス名は、どちらもspoke2.example.comである必要があります。

      • spoke1.example.comデータベースからhub.example.comデータベースへ。データベース・リンクの名前とサービス名は、どちらもhub.example.comである必要があります。

      • spoke2.example.comデータベースからhub.example.comデータベースへ。データベース・リンクの名前とサービス名は、どちらもhub.example.comである必要があります。

      各データベース・リンクは、Oracle Streams管理者のスキーマに作成する必要があります。また、各データベース・リンクは宛先データベースでOracle Streams管理者に接続する必要があります。方法については、「チュートリアル: データベース・リンクの作成」を参照してください。

    4. Oracle Streamsレプリケーション環境に参加する各データベースで初期化パラメータを正しく設定します。方法については、「Oracle Streamsレプリケーションの準備」を参照してください。

    5. ARCHIVELOGモードで実行するように各ソース・データベースを構成します。取得プロセスがソース・データベースで生成された変更を取得するためには、ソース・データベースをARCHIVELOGモードで実行する必要があります。この例では、すべてのデータベースをARCHIVELOGモードで実行する必要があります。ARCHIVELOGモードで実行するためのデータベースの構成の詳細は、『Oracle Database管理者ガイド』を参照してください。

  2. コマンドラインでSQL*Plusを開き、Oracle Streams管理者としてspoke1.example.comデータベースに接続します。

    SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

  3. MAINTAIN_SCHEMASプロシージャで生成されるファイル(インスタンス化に使用するデータ・ポンプ・エクスポート・ダンプ・ファイルを含む)を保持するディレクトリ・オブジェクトを作成します。ディレクトリ・オブジェクトは、コンピュータ・システム上の任意のアクセス可能ディレクトリを指すことができます。たとえば、次の文は、/usr/spoke1_log_filesディレクトリを指すspoke1_dirという名前のディレクトリ・オブジェクトを作成します。

    CREATE DIRECTORY spoke1_dir AS '/usr/spoke1_log_files';
    
    
  4. SQL*Plusで、spoke2.example.comデータベースにOracle Streams管理者として接続します。

    SQL*Plusでのデータベースへの接続の詳細は、『Oracle Database管理者ガイド』を参照してください。

  5. MAINTAIN_SCHEMASプロシージャで生成されるファイル(インスタンス化に使用するデータ・ポンプ・エクスポート・ダンプ・ファイルを含む)を保持するディレクトリ・オブジェクトを作成します。ディレクトリ・オブジェクトは、コンピュータ・システム上の任意のアクセス可能ディレクトリを指すことができます。たとえば、次の文は、/usr/spoke2_log_filesディレクトリを指すspoke2_dirという名前のディレクトリ・オブジェクトを作成します。

    CREATE DIRECTORY spoke2_dir AS '/usr/spoke2_log_files';
    
    
  6. SQL*Plusで、hub.example.comデータベースにOracle Streams管理者として接続します。

  7. MAINTAIN_SCHEMASプロシージャで生成されるファイル(インスタンス化に使用するデータ・ポンプ・エクスポート・ダンプ・ファイルを含む)を保持するディレクトリ・オブジェクトを作成します。ディレクトリ・オブジェクトは、コンピュータ・システム上の任意のアクセス可能ディレクトリを指すことができます。たとえば、次の文は、/usr/hub_log_filesディレクトリを指すhub_dirという名前のディレクトリ・オブジェクトを作成します。

    CREATE DIRECTORY hub_dir AS '/usr/hub_log_files';
    
    
  8. SQL*Plusでhub.example.comデータベースにまだStreams管理者として接続しているときに、MAINTAIN_SCHEMASプロシージャを実行してhub.example.comデータベースとspoke1.example.comデータベース間のレプリケーションを構成します。

    BEGIN
      DBMS_STREAMS_ADM.MAINTAIN_SCHEMAS(
        schema_names                 => 'hr',
        source_directory_object      => 'hub_dir',
        destination_directory_object => 'spoke1_dir',
        source_database              => 'hub.example.com',
        destination_database         => 'spoke1.example.com',
        capture_name                 => 'capture_hns',
        capture_queue_table          => 'source_hns_qt',
        capture_queue_name           => 'source_hns',
        propagation_name             => 'propagation_spoke1',
        apply_name                   => 'apply_spoke1',
        apply_queue_table            => 'destination_spoke1_qt',
        apply_queue_name             => 'destination_spoke1',
        bi_directional               => TRUE);
    END;
    /
    
    

    MAINTAIN_SCHEMASプロシージャは、多くの構成タスクを実行するため時間がかかることがあります。プロシージャの実行中は、宛先データベースのレプリケートされたデータベース・オブジェクトにデータ操作言語(DML)またはデータ定義言語(DLL)変更が行われないようにしてください。

    MAINTAIN_SCHEMASプロシージャで必要なパラメータは、schema_namessource_directory_objectdestination_directory_objectsource_databaseおよびdestination_databaseです。また、構成プロシージャを使用して双方向レプリケーションを構成する際は、bi_directionalパラメータをTRUEに設定する必要があります。「Oracle Streamsレプリケーションの構成プロシージャの概要」を参照してください。

    この例では、取得プロセス、取得プロセスのキュー表、取得プロセスのキュー、伝播、適用プロセス、適用プロセスのキュー表および適用プロセスのキューの名前を選択できることを示すために他のパラメータを指定しています。これらのパラメータを指定しないと、システムで生成された名前が使用されます。

    構成プロシージャを実行すると、進捗情報がDBA_RECOVERABLE_SCRIPTDBA_RECOVERABLE_SCRIPT_PARAMSDBA_RECOVERABLE_SCRIPT_BLOCKSおよびDBA_RECOVERABLE_SCRIPT_ERRORSデータ・ディクショナリ・ビューに記録されます。プロシージャがエラーによって停止した場合は、DBMS_STREAMS_ADMパッケージ内のRECOVER_OPERATIONプロシージャの使用方法について、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

  9. SQL*Plusでhub.example.comデータベースにまだStreams管理者として接続しているときに、MAINTAIN_SCHEMASプロシージャを実行してhub.example.comデータベースとspoke2.example.comデータベース間のレプリケーションを構成します。

    BEGIN
      DBMS_STREAMS_ADM.MAINTAIN_SCHEMAS(
        schema_names                 => 'hr',
        source_directory_object      => 'hub_dir',
        destination_directory_object => 'spoke2_dir',
        source_database              => 'hub.example.com',
        destination_database         => 'spoke2.example.com',
        capture_name                 => 'capture_hns',
        capture_queue_table          => 'source_hns_qt',
        capture_queue_name           => 'source_hns',
        propagation_name             => 'propagation_spoke2',
        apply_name                   => 'apply_spoke2',
        apply_queue_table            => 'destination_spoke2_qt',
        apply_queue_name             => 'destination_spoke2',
        bi_directional               => TRUE);
    END;
    /
    
    
  10. hub.example.comspoke1.example.comspoke2.example.comの各データベースでhrスキーマ内のすべての表に対して最新時刻競合解消を構成します。このスキーマには、countriesdepartmentsemployeesjobsjob_historylocationsおよびregionsの各表が含まれます。方法については、「チュートリアル: 表の最新時刻競合解消の構成」を参照してください。

例を完了すると、次の特性を持つハブアンドスポーク・レプリケーション環境が構成されます。

Oracle Streamsレプリケーション構成を確認するには:
  1. 各データベースで、取得プロセスが有効化され、取得タイプがローカルであることを確認します。確認には、「取得プロセスの情報の表示」の手順に従って、「取得」サブページの「ステータス」および「取得タイプ」フィールドをチェックします。

  2. 各データベースで、伝播が有効化されていることを確認します。確認には、「伝播の情報の表示」の手順に従って、「伝播」サブページで「ステータス」フィールドを確認します。ハブ・データベースには2つの伝播が必要で、両方の伝播が有効化されている必要があります。各スポーク・データベースには、有効化されている1つの伝播が必要です。

  3. 各データベースで、適用プロセスが有効化されていることを確認します。確認には、「適用プロセスの情報の表示」の手順に従って、「適用」サブページで「ステータス」フィールドを確認します。ハブ・データベースには2つの適用プロセスが必要で、両方の適用プロセスが有効化されている必要があります。各スポーク・データベースには、有効化されている1つの適用プロセスが必要です。

変更をレプリケートするには:
  1. データベースの1つで、DML変更をhrスキーマの任意の表に対して行います。

  2. 変更のレプリケーションが完了するまで待ってから、SQL*Plusを使用して他のデータベースで変更された表を問い合せてDML変更を表示します。

    参照:

     

チュートリアル: 同期取得を使用した2データベース・レプリケーションの構成

この項の例では、hrスキーマにある2つの表に、データ操作言語(DML)変更をレプリケートするOracle Streamsレプリケーション環境を構成します。この例では、各データベースで同期取得を使用して変更を取得します。この例では、Oracle Streamsレプリケーション環境で、データベースのグローバル名にsync1.example.comおよびsync2.example.comを使用します。ただし、例を完了するために、ご使用の環境の2つのデータベースに置き換えることもできます。2データベース・レプリケーション環境の詳細は、「2データベース・レプリケーション環境の概要」を参照してください。

具体的に、この例では、sync1.example.comおよびsync2.example.comデータベースでhr.employeesおよびhr.departments表を共有するOracle Streamsの2データベース・レプリケーション環境を構成します。2つのデータベースは、すべてのDML変更をこれらの表にレプリケートします。hrサンプル・スキーマは、Oracle Databaseに付属してデフォルトでインストールされます。


注意:

同期取得は、表レベルでのみ変更を取得できます。スキーマ・レベルまたはデータベース・レベルでの変更の取得はできません。同期取得は、DBMS_STREAMS_ADMパッケージのADD_TABLE_RULESおよびADD_SUBSET_RULESプロシージャを使用して構成できます。 


図4-14に、この例で作成する環境の概要を示します。

図4-14    同期取得を使用した2データベース・レプリケーション環境


画像の説明

このレプリケーション環境を同期取得で構成するには:
  1. 2データベース・レプリケーション環境を準備するには、次のタスクを完了します。

    1. ネットワーク接続を構成して、2つのデータベースが相互に通信できるようにします。データベース間のネットワーク接続の構成の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

    2. レプリケーション環境に参加する各データベースでOracle Streams管理者を構成します。方法については、「チュートリアル: Oracle Streams管理者の作成」を参照してください。この例では、Oracle Streams管理者がstrmadminであると想定します。

    3. Oracle Streamsレプリケーション環境に参加する各データベースで初期化パラメータを正しく設定します。方法については、「Oracle Streamsレプリケーションの準備」を参照してください。

    4. hr.employeesおよびhr.departments表が2つのデータベースに存在し、これらのデータベースで一貫していることを確認します。データベース・オブジェクトが1つのデータベースにのみ存在する場合は、エクスポート/インポートを使用してこれらを他のデータベースで作成および移入できます。エクスポート/インポートの詳細は、『Oracle Databaseユーティリティ』を参照してください。

  2. 各データベースに2つのANYDATAキューを作成します。この例では、各データベースに次の2つのキューを作成します。

    • Oracle Streams管理者strmadminが所有する、capture_queueという名前のキュー。このキューはデータベースでの同期取得によって使用されます。

    • Streams管理者strmadminが所有する、apply_queueという名前のキュー。このキューはデータベースでの適用プロセスによって使用されます。

    方法については、「ANYDATAキューの作成」を参照してください。

  3. 各データベースから他のデータベースへのデータベース・リンクを作成します。

    1. sync1.example.comデータベースからsync2.example.comデータベースに、データベース・リンクを作成します。データベース・リンクは、Oracle Streams管理者のスキーマに作成する必要があります。また、データベース・リンクはsync2.example.comデータベースでOracle Streams管理者に接続する必要があります。データベース・リンクの名前およびサービス名は、どちらもsync2.example.comである必要があります。

    2. sync2.example.comデータベースからsync1.example.comデータベースに、データベース・リンクを作成します。データベース・リンクは、Oracle Streams管理者のスキーマに作成する必要があります。また、データベース・リンクはsync1.example.comデータベースでOracle Streams管理者に接続する必要があります。データベース・リンクの名前およびサービス名は、どちらもsync1.example.comである必要があります。

    方法については、「チュートリアル: データベース・リンクの作成」を参照してください。

  4. sync1.example.comデータベースで適用プロセスを構成します。この適用プロセスは、sync2.example.comデータベースで取得され、sync1.example.comデータベースに伝播された共有表への変更を適用します。

    1. SQL*Plusを開き、sync1.example.comデータベースにOracle Streams管理者として接続します。

      SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

    2. 適用プロセスを作成します。

      BEGIN
        DBMS_APPLY_ADM.CREATE_APPLY(
          queue_name     => 'strmadmin.apply_queue',
          apply_name     => 'apply_emp_dep',
          apply_captured => FALSE);
      END;
      /
      
      

      適用プロセスは永続キュー内の変更を適用するため、apply_capturedパラメータがFALSEに設定されます。これらは、同期取得によって取得された変更です。apply_capturedパラメータは、適用プロセスが取得プロセスによって取得された変更を適用する場合にのみTRUEに設定する必要があります。

      適用プロセスは起動しないでください。

    3. 適用プロセス・ルール・セットにルールを追加します。

      BEGIN 
        DBMS_STREAMS_ADM.ADD_TABLE_RULES(
          table_name      => 'hr.employees',
          streams_type    => 'apply',
          streams_name    => 'apply_emp_dep',
          queue_name      => 'strmadmin.apply_queue',
          source_database => 'sync2.example.com');
      END;
      /
      
      

      このルールは、apply_queueキューに出現するhr.employees表に対するすべてのDML変更を適用するよう適用プロセスapply_emp_depに指示します。ルールは、適用プロセスがsync2.example.comソース・データベースで取得された変更のみ適用することも指定します。

    4. 適用プロセス・ルール・セットにルールを追加します。

      BEGIN 
        DBMS_STREAMS_ADM.ADD_TABLE_RULES(
          table_name      => 'hr.departments',
          streams_type    => 'apply',
          streams_name    => 'apply_emp_dep',
          queue_name      => 'strmadmin.apply_queue',
          source_database => 'sync2.example.com');
      END;
      /
      
      

      このルールは、apply_queueキューに出現するhr.departments表に対するすべてのDML変更を適用するよう適用プロセスapply_emp_depに指示します。ルールは、適用プロセスがsync2.example.comソース・データベースで取得された変更のみ適用することも指定します。

  5. sync2.example.comデータベースで適用プロセスを構成します。この適用プロセスは、sync1.example.comデータベースで取得され、sync2.example.comデータベースに伝播された変更を適用します。

    1. SQL*Plusで、sync2.example.comデータベースにOracle Streams管理者として接続します。

      SQL*Plusでのデータベースへの接続の詳細は、『Oracle Database管理者ガイド』を参照してください。

    2. 適用プロセスを作成します。

      BEGIN
        DBMS_APPLY_ADM.CREATE_APPLY(
          queue_name     => 'strmadmin.apply_queue',
          apply_name     => 'apply_emp_dep',
          apply_captured => FALSE);
      END;
      /
      
      

      適用プロセスは永続キュー内の変更を適用するため、apply_capturedパラメータがFALSEに設定されます。これらの変更は、同期取得によって取得されました。apply_capturedパラメータは、適用プロセスが取得プロセスによって取得された変更を適用する場合にのみTRUEに設定する必要があります。

      適用プロセスは起動しないでください。

    3. 適用プロセス・ルール・セットにルールを追加します。

      BEGIN 
        DBMS_STREAMS_ADM.ADD_TABLE_RULES(
          table_name      => 'hr.employees',
          streams_type    => 'apply',
          streams_name    => 'apply_emp_dep',
          queue_name      => 'strmadmin.apply_queue',
          source_database => 'sync1.example.com');
      END;
      /
      
      

      このルールは、apply_queueキューに出現するすべてのDML変更をhr.employees表に適用するよう適用プロセスapply_emp_depに指示します。ルールは、適用プロセスがsync1.example.comソース・データベースで取得された変更のみ適用することも指定します。

    4. 適用プロセス・ルール・セットにルールを追加します。

      BEGIN 
        DBMS_STREAMS_ADM.ADD_TABLE_RULES(
          table_name      => 'hr.departments',
          streams_type    => 'apply',
          streams_name    => 'apply_emp_dep',
          queue_name      => 'strmadmin.apply_queue',
          source_database => 'sync1.example.com');
      END;
      /
      
      

      このルールは、apply_queueキューに出現するすべてのDML変更をhr.departments表に適用するよう適用プロセスapply_emp_depに指示します。ルールは、適用プロセスがsync1.example.comソース・データベースで取得された変更のみ適用することも指定します。

  6. sync1.example.comデータベースのキューからsync2.example.comデータベースのキューに変更を送信する伝播を作成します。

    1. SQL*Plusで、sync1.example.comデータベースにOracle Streams管理者として接続します。

    2. sync2.example.comデータベースに対する変更を送信する伝播の作成を作成します。

      BEGIN
        DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES(
          table_name              => 'hr.employees',
          streams_name            => 'send_emp_dep',
          source_queue_name       => 'strmadmin.capture_queue',
          destination_queue_name  => 'strmadmin.apply_queue@sync2.example.com',
          source_database         => 'sync1.example.com',
          queue_to_queue          => TRUE);
      END;
      /
      
      

      ADD_TABLE_PROPAGATION_RULESプロシージャは、伝播およびポジティブ・ルール・セットを作成します。このプロシージャは、sync2.example.comデータベース内のapply_queueキューのhr.employees表にDML変更を送信するよう指示する伝播ルール・セットにルールの追加もします。

    3. 伝播ルール・セットにルールを追加します。

      BEGIN
        DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES(
          table_name              => 'hr.departments',
          streams_name            => 'send_emp_dep',
          source_queue_name       => 'strmadmin.capture_queue',
          destination_queue_name  => 'strmadmin.apply_queue@sync2.example.com',
          source_database         => 'sync1.example.com',
          queue_to_queue          => TRUE);
      END;
      /
      
      

      ADD_TABLE_PROPAGATION_RULESプロシージャは、sync2.example.comデータベース内のapply_queueキューのhr.departments表にDML変更を送信するよう指示する伝播ルール・セットにルールを追加します。

  7. sync2.example.comデータベースのキューからsync1.example.comデータベースのキューに変更を送信する伝播を作成します。

    1. SQL*Plusで、sync2.example.comデータベースにOracle Streams管理者として接続します。

    2. sync1.example.comデータベースに対する変更を送信する伝播の作成を作成します。

      BEGIN
        DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES(
          table_name              => 'hr.employees',
          streams_name            => 'send_emp_dep',
          source_queue_name       => 'strmadmin.capture_queue',
          destination_queue_name  => 'strmadmin.apply_queue@sync1.example.com',
          source_database         => 'sync2.example.com',
          queue_to_queue          => TRUE);
      END;
      /
      
      

      ADD_TABLE_PROPAGATION_RULESプロシージャは、伝播およびポジティブ・ルール・セットを作成します。このプロシージャでは、sync1.example.comデータベース内のapply_queueキューのhr.employees表にDML変更を送信するよう指示する伝播ルール・セットにルールを追加します。

    3. 伝播ルール・セットにルールを追加します。

      BEGIN
        DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES(
          table_name              => 'hr.departments',
          streams_name            => 'send_emp_dep',
          source_queue_name       => 'strmadmin.capture_queue',
          destination_queue_name  => 'strmadmin.apply_queue@sync1.example.com',
          source_database         => 'sync2.example.com',
          queue_to_queue          => TRUE);
      END;
      /
      
      

      ADD_TABLE_PROPAGATION_RULESプロシージャは、sync1.example.comデータベース内のapply_queueキューのhr.departments表にDML変更を送信するよう指示する伝播ルール・セットにルールを追加します。

  8. sync1.example.comデータベースで同期取得を構成します。

    1. SQL*Plusで、sync1.example.comデータベースにOracle Streams管理者として接続します。

    2. ADD_TABLE_RULESプロシージャを実行して、同期取得を作成し、hr.employees表に対する変更を取得するよう指示するルールを追加します。

      BEGIN 
        DBMS_STREAMS_ADM.ADD_TABLE_RULES(
          table_name    => 'hr.employees',
          streams_type  => 'sync_capture',
          streams_name  => 'sync_capture',
          queue_name    => 'strmadmin.capture_queue');
      END;
      /
      
      
    3. 同期取得ルール・セットにルールを追加します。

      BEGIN 
        DBMS_STREAMS_ADM.ADD_TABLE_RULES(
          table_name    => 'hr.departments',
          streams_type  => 'sync_capture',
          streams_name  => 'sync_capture',
          queue_name    => 'strmadmin.capture_queue');
      END;
      /
      
      

    これらのプロシージャを実行して次のアクションを実行します。

    • 現在のデータベースでsync_captureという名前の同期取得を作成します。同じ名前の同期取得は存在できません。

    • 同期取得を有効にします。同期取得は無効にできません。

    • strmadminが所有するcapture_queueという名前の既存のキューで同期取得を関連付けます。

    • 同期取得sync_captureのポジティブ・ルール・セットを作成します。ルール・セットにはシステムで作成された名前があります。

    • hr.employees表に対するDML変更を取得するルールを作成し、同期取得のポジティブ・ルール・セットにルールを追加します。ルールにはシステムで生成された名前があります。

    • 表に対してDBMS_CAPTURE_ADM.PREPARE_SYNC_INSTANTIATIONファンクションを自動的に実行することで、インスタンス化用にhr.employees表を準備します。

    • hr.departments表に対するDML変更を取得するルールを取得するルールを作成し、同期取得のポジティブ・ルール・セットにルールを追加します。ルールにはシステムで生成された名前があります。

    • 表に対してDBMS_CAPTURE_ADM.PREPARE_SYNC_INSTANTIATIONファンクションを自動的に実行することで、インスタンス化用にhr.departments表を準備します。

  9. sync2.example.comデータベースで同期取得を構成します。

    1. SQL*Plusで、sync2.example.comデータベースにOracle Streams管理者として接続します。

    2. ADD_TABLE_RULESプロシージャを実行して、同期取得を作成し、hr.employees表に対する変更を取得するよう指示するルールを追加します。

      BEGIN 
        DBMS_STREAMS_ADM.ADD_TABLE_RULES(
          table_name    => 'hr.employees',
          streams_type  => 'sync_capture',
          streams_name  => 'sync_capture',
          queue_name    => 'strmadmin.capture_queue');
      END;
      /
      
      
    3. 同期取得ルール・セットにルールを追加します。

      BEGIN 
        DBMS_STREAMS_ADM.ADD_TABLE_RULES(
          table_name    => 'hr.departments',
          streams_type  => 'sync_capture',
          streams_name  => 'sync_capture',
          queue_name    => 'strmadmin.capture_queue');
      END;
      /
      
      

    手順8では、これらのプロシージャによって現在のデータベースで実行されるアクションについて説明します。

  10. sync2.example.comデータベースで表のインスタンス化SCNを設定します。

    1. SQL*Plusで、sync1.example.comデータベースにOracle Streams管理者として接続します。

    2. sync2.example.comデータベースでhr.employees表のインスタンス化SCNを設定します。

      DECLARE
        iscn  NUMBER;    -- Variable to hold instantiation SCN value
      BEGIN
        iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();
        DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN@sync2.example.com(
          source_object_name    => 'hr.employees',
          source_database_name  => 'sync1.example.com',
          instantiation_scn     => iscn);
      END;
      /
      
      
    3. sync2.example.comデータベースでhr.departments表のインスタンス化SCNを設定します。

      DECLARE
        iscn  NUMBER;    -- Variable to hold instantiation SCN value
      BEGIN
        iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();
        DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN@sync2.example.com(
          source_object_name    => 'hr.departments',
          source_database_name  => 'sync1.example.com',
          instantiation_scn     => iscn);
      END;
      /
      
      

    インスタンス化SCNは、適用プロセスが表に変更を適用できる最小のSCNです。適用プロセスがsync2.example.comデータベースの共有表への変更を適用する前に、インスタンス化SCNを各表に対して設定する必要があります。

  11. sync1.example.comデータベースで表のインスタンス化SCNを設定します。

    1. SQL*Plusで、sync2.example.comデータベースにOracle Streams管理者として接続します。

    2. sync1.example.comデータベースでhr.employees表のインスタンス化SCNを設定します。

      DECLARE
        iscn  NUMBER;    -- Variable to hold instantiation SCN value
      BEGIN
        iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();
        DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN@sync1.example.com(
          source_object_name    => 'hr.employees',
          source_database_name  => 'sync2.example.com',
          instantiation_scn     => iscn);
      END;
      /
      
      
    3. sync2.example.comデータベースでhr.departments表のインスタンス化SCNを設定します。

      DECLARE
        iscn  NUMBER;    -- Variable to hold instantiation SCN value
      BEGIN
        iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();
        DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN@sync1.example.com(
          source_object_name    => 'hr.departments',
          source_database_name  => 'sync2.example.com',
          instantiation_scn     => iscn);
      END;
      /
      
      
  12. 各データベースで適用プロセスを起動します。

    1. SQL*Plusで、sync1.example.comデータベースにOracle Streams管理者として接続します。

    2. 適用プロセスを開始します。

      BEGIN
        DBMS_APPLY_ADM.START_APPLY(
          apply_name => 'apply_emp_dep');
      END;
      /
      
      
    3. SQL*Plusで、sync2.example.comデータベースにOracle Streams管理者として接続します。

    4. 適用プロセスを開始します。

      BEGIN
        DBMS_APPLY_ADM.START_APPLY(
          apply_name => 'apply_emp_dep');
      END;
      /
      
      

    適用プロセスの開始にEnterprise Managerを使用する方法については、「適用プロセスの起動と停止」を参照してください。

  13. sync1.example.comおよびsync2.example.comの各データベースのhr.departmentsおよびhr.employeesの各表に対して、最新時刻競合解消を構成します。方法については、「チュートリアル: 表の最新時刻競合解消の構成」を参照してください。

次のような特性を持つ2データベース・レプリケーション環境が構成されます。

Oracle Streamsレプリケーション構成を確認するには:
  1. 各データベースで、次の手順を実行して同期取得が構成されることを確認します。

    1. SQL*Plusを起動して、データベースにOracle Streams管理者として接続します。

      SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

    2. 次のようにALL_SYNC_CAPTUREデータ・ディクショナリ・ビューを問い合せます。

      SELECT CAPTURE_NAME FROM ALL_SYNC_CAPTURE;
      
      

      各データベースにsync_captureという名前の同期取得が存在していることを確認します。

  2. 各データベースで、伝播が有効化されていることを確認します。確認には、「伝播の情報の表示」の手順に従って、「伝播」サブページで「ステータス」を確認します。

  3. 各データベースで、適用プロセスが有効化されていることを確認します。確認には、「適用プロセスの情報の表示」の手順に従って、「適用」サブページで「ステータス」を確認します。

変更をレプリケートするには:
  1. データベースの1つで、hr.employees表またはhr.departments表に対してDML変更を行います。

  2. 変更のレプリケーションが完了するまで待ってから、SQL*Plusを使用して他のデータベースのhr.employees表またはhr.departments表を問い合せて変更を表示します。

    参照:

     

チュートリアル: 表の最新時刻競合解消の構成

レプリケーション環境では、競合解消によって競合が自動的に解消されます。競合解消の詳細は、「競合と競合解消の概要」を参照してください。

更新競合を解消する最も一般的な方法は、最新のタイムスタンプを持つ変更を保持し、古い変更を破棄することです。この方法では、適用中に競合が検出された場合、適用プロセスは、変更のタイムスタンプ列が表の対応する行よりも新しい場合に変更を適用します。表のタイムスタンプ列が最新の場合、適用プロセスは変更を破棄します。

この項の例では、次のアクションを完了することにより、hr.departments表の最新時刻競合解消を構成します。

この項の手順を使用して、任意の表の競合解消を構成できます。これを構成するには、hrをスキーマ名で置換し、departmentsを表名で置換します。また、SET_UPDATE_CONFLICT_HANDLERプロシージャを実行するときに、hr.departments表の列を、使用する表の列で置換します。

hr.departments表の最新時刻競合解消を構成するには:
  1. 表にtime列を追加します。

    1. SQL*Plusで、Oracle Streams管理者やSYSTEMなどの管理ユーザーとしてデータベースに接続します。別の方法として、時間列が追加される表を所有しているユーザーとして接続することもできます。

      SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

    2. SQL文ALTER TABLEを使用して、表にtime列を追加します。この例では、次の文を実行してtime列をhr.departments表に追加します。

      ALTER TABLE hr.departments ADD (time TIMESTAMP WITH TIME ZONE);
      
      
  2. トリガーを作成して変更が発生した時刻で各マスター表のtime列を更新します。

    ヒント:

    トリガーを使用してtime列を更新するかわりに、アプリケーションで表に対して列を修正または挿入するたびに、time列を移入できます。 

    1. Oracle Enterprise Managerで、SYSTEMまたはOracle Streams管理者などの管理者ユーザーとしてデータベースにログインします。

    2. 「データベース」ホームページに移動します。

    3. 「スキーマ」をクリックして「スキーマ」サブページを開きます。

    4. 「プログラム」セクションで「トリガー」をクリックします。

    5. 「トリガー」ページで、「作成」をクリックします。

      「トリガーの作成」ページが表示され、「一般」サブページが表示されます。


      画像の説明

    6. 「名前」フィールドにトリガーの名前を入力します。この例では、insert_departments_timeを入力します。

    7. 表を所有しているスキーマを「スキーマ」フィールドに入力します。この例では、「スキーマ」フィールドにはhrと入力します。

    8. 「トリガー本体」フィールドに次のように入力します。

      BEGIN
         -- Consider time synchronization problems. The previous update to this
         -- row might have originated from a site with a clock time ahead of
         -- the local clock time.
         IF :OLD.TIME IS NULL OR :OLD.TIME < SYSTIMESTAMP THEN
           :NEW.TIME := SYSTIMESTAMP;
         ELSE
           :NEW.TIME := :OLD.TIME + 1 / 86400;
         END IF;
      END;
      
      
    9. 「イベント」をクリックして「イベント」サブページを開きます。

    10. 「対象オブジェクト」リストで「表」が選択されていることを確認します。

    11. 「表(Schema.Table)」フィールドにschema.tableの形式で表名を入力するか、懐中電灯アイコンを使用してデータベース・オブジェクトを検索します。この例では、hr.departmentsを入力します。

    12. 「起動タイミング」「前」が選択されていることを確認してください。

    13. 「イベント」「選択」および「列の更新」を選択します。

      表内の列が表示されます。

    14. 新規のtime列を除く表のすべての列を選択します。

    15. 「拡張」をクリックして、「拡張」サブページを開きます。

    16. 「行レベル・トリガー」を選択します。

    17. 「OK」をクリックしてトリガーを作成します。

  3. SQL*Plusで、データベースにOracle Streams管理者として接続します。

    SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

  4. 表の列にサプリメンタル・ロギングを追加します。

    ALTER TABLE hr.departments ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
    
    

    サプリメンタル・ロギングは、適用中の競合解消に必要です。

  5. SET_UPDATE_CONFLICT_HANDLERプロシージャを実行して、表の最新時刻競合解消を構成します。

    たとえば、次のプロシージャを実行して、hr.departments表の最新時刻競合解消を構成します。

    DECLARE
      cols  DBMS_UTILITY.NAME_ARRAY;
    BEGIN
      cols(1) := 'department_id';
      cols(2) := 'department_name';
      cols(3) := 'manager_id';
      cols(4) := 'location_id';
      cols(5) := 'time';
      DBMS_APPLY_ADM.SET_UPDATE_CONFLICT_HANDLER(
        object_name        =>  'hr.departments',
        method_name        =>  'MAXIMUM',
        resolution_column  =>  'time',
        column_list        =>  cols);
    END;
    /
    
    

    cols列リストの表内のすべての列を含みます。

  6. レプリケーション環境で競合解消が必要な表について、これらの手順を繰り返します。複数のデータベースで表の競合解消を構成することが必要な場合があります。

    レプリケーション環境を構成または拡張する例を実行している場合は、適切な表に対して最新時刻競合解消を構成します。

例からこの項に移動した場合は、ここでその例に戻ります。

参照:

 


戻る 次へ
Oracle
Copyright © 2007, 2008 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引