3 Oracle Streamsレプリケーションの柔軟な構成
この章では、柔軟な方法を使用した2つ以上のデータベース間でのOracle Streamsレプリケーションの構成について説明します。この章では、単一ソースまたは複数ソースのレプリケーション環境を構築するために各Oracle Streamsコンポーネントを構成する方法を手順ごとに説明します。
一般的なタイプの単一ソース・レプリケーション環境としては、レプリケートされたデータベース・オブジェクトへの変更がスポーク・データベースで許可されていないハブ・アンド・スポーク・レプリケーション環境があります。一般的なタイプの複数ソース・レプリケーション環境は、次のとおりです。
-
レプリケートされたデータベース・オブジェクトへの変更がスポーク・データベースで許可されているハブ・アンド・スポーク・レプリケーション環境
-
n-wayレプリケーション環境
これらの一般的なタイプのレプリケーション環境の詳細は、「どのタイプのレプリケーション環境を構成するかの決定」を参照してください。
可能な場合は、「Oracle Streamsレプリケーションの簡単な構成」で説明した、簡単な方法を使用してOracle Streamsレプリケーションを構成することを検討してください。Oracle Enterprise Manager Cloud ControlのOracle StreamsツールまたはDBMS_STREAMS_ADM
パッケージの1つのプロシージャのみを使用して、2つのデータベースを含むレプリケーション環境内のすべてのOracle Streamsコンポーネントを構成できます。また、次のいずれかの簡単な方法を使用しても、レプリケーション環境のカスタム要件を満たすことができます。
-
構成スクリプトを生成し、要件を満たすようにスクリプトを変更します。
-
2つのデータベース間でOracle Streamsレプリケーションを構成し、「Oracle Streamsレプリケーション環境への追加」の手順を実行して新しいデータベース・オブジェクトまたはデータベースを環境に追加します。
ただし、Oracle Streamsレプリケーションの構成で、簡単な方法より高い柔軟性が必要な場合は、この章の手順を実行して環境を構成します。
この章には次のトピックが含まれます:
注意:
-
ここで説明する手順は、
DBMS_STREAMS_ADM
パッケージを使用してOracle Streams環境を構成する場合を想定しています。他のパッケージを使用する場合は、タスクごとに追加の手順が必要になることがあります。 -
特定のタイプのデータベース・オブジェクトは、Oracle Streamsではサポートされません。Oracle Streams環境を構成する場合、取得プロセスが、サポートされていないデータベース・オブジェクトに対する変更の取得を試行しないことを確認します。また、同期取得または適用プロセスが、サポートされていない列に対する変更の処理を試行しないことも確認します。サポートされていないデータベース・オブジェクトおよび列を表示するには、
DBA_STREAMS_UNSUPPORTED
およびDBA_STREAMS_COLUMNS
データ・ディクショナリ・ビューを問い合せます。
関連項目:
Oracle Streamsによってサポートされていないデータベース・オブジェクトを判別する手順については、『Oracle Streams概要および管理』を参照してください。
3.1 新規の単一ソースOracle Streams環境の作成
この項では、新規の単一ソースOracle Streams環境を作成する場合の一般的な手順について説明します。単一ソース環境とは、レプリケートされたデータのソース・データベースが1つのみの環境です。単一ソース環境に複数のソース・データベースが存在する場合もありますが、2つのソース・データベースが同じデータを取得することはありません。単一ソース環境の例としては、2つのデータベースを使用する一方向レプリケーション環境があります。
新規のOracle Streams環境で取得プロセスを起動して同期取得を作成し、伝播を構成する前に、LCRを受信する伝播または適用プロセスが、これらのLCRを処理するように構成されていることを確認してください。つまり、伝播または適用プロセスが存在し、それぞれがLCRを適切に処理するルール・セットに関連付けられている必要があります。これらの伝播と適用プロセスがこれらのLCRを処理するように適切に構成されていないと、LCRが失われる可能性があります。
この例では、レプリケートされたデータベース・オブジェクトが宛先データベースで読取り専用であることを想定しています。レプリケートされたデータベース・オブジェクトが宛先データベースで読取り/書込み可能である場合、宛先データベースのレプリケート・オブジェクトに対して行われた変更をレプリケートするようにOracle Streamsが構成されないため、レプリケーション環境では同期状態が保たれません。
図3-1に、単一ソースのOracle Streamsレプリケーション環境の例を示します。
図3-1に示されているものより複雑なOracle Streamsレプリケーション環境を作成することもできます。たとえば、単一ソースのOracle Streamsレプリケーション環境ではダウンストリームの取得および有向ネットワークを使用できます。
通常、レプリケートされたデータベース・オブジェクトに対する変更が1つのデータベースで取得されてから、リモート・データベースに伝播され、そこで適用される新規の単一ソースOracle Streams環境を構成する場合は、環境を次の順序で構成する必要があります。
環境を構成するときには、取得プロセスおよび適用プロセスの作成時にこれらのプロセスが停止していることに注意してください。ただし、同期取得は作成すると即時に変更の取得を開始し、伝播は作成すると即時にLCRを送信するようにスケジュールされます。取得プロセスまたは同期取得は、リモートの宛先データベースで関連オブジェクトをインスタンス化する前に作成する必要があります。取得プロセスの起動または同期取得の作成の前に伝播と適用プロセスを作成し、ストリーム全体を実行する前にオブジェクトをインスタンス化してください。
関連項目:
-
単一ソース環境を設定する場合の詳細な例は、『Oracle Streams拡張例』を参照してください。
3.2 新規の複数ソースOracle Streams環境の作成
この項では、新規の複数ソースOracle Streams環境を作成する場合の一般的な手順について説明します。複数ソース環境とは、レプリケートされたデータに複数のソース・データベースが存在する環境です。複数ソース環境の例としては、n-wayレプリケーション環境があります。
この例では、次の用語を使用しています。
-
実装済データベース: 新規の複数ソース環境を作成する前に、レプリケートされたデータベース・オブジェクトがすでに含まれているデータベース。新規のOracle Streams環境を作成するには、1つ以上の実装済データベースが必要です。
-
エクスポート・データベース: レプリケートされたデータベース・オブジェクトのエクスポートを実行する実装済データベース。このエクスポートを使用して、レプリケートされたデータベース・オブジェクトがインポート・データベースでインスタンス化されます。すべてのデータベースが実装済データベースである環境では、エクスポート・データベースが存在しないことがあります。
-
インポート・データベース: 新規の複数ソース環境を作成する前には、レプリケートされたデータベース・オブジェクトが含まれていないデータベース。レプリケートされたデータベース・オブジェクトのインポートを実行して、そのデータベース・オブジェクトをインポート・データベースでインスタンス化します。すべてのデータベースが実装済データベースである環境では、インポート・データベースが存在しないことがあります。
図3-2に、複数ソースのOracle Streams環境の例を示します。
図3-2に示されているものより複雑なOracle Streamsレプリケーション環境を作成することもできます。たとえば、複数ソースOracle Streamsレプリケーション環境ではダウンストリームの取得および有向ネットワークを使用できます。
Oracle Streamsレプリケーション環境に複数のソース・データベースが存在する場合、変更の循環が発生する可能性があります。変更の循環は、変更が発生場所であるデータベースに再送されると発生します。通常は、変更の循環を回避する必要があります。レプリケーション環境を構成する前に、「Oracle Streamsタグ」を参照して、変更の循環が回避されるようにレプリケーション環境を構成してください。
次の手順に従って複数ソース環境を作成します。
注意:
Oracle Streams環境に追加するデータベースでは、そのデータベースでのインスタンス化が完了するまでは、共有されるオブジェクトに対して変更が行われないことを確認してください。
前述の手順を完了してから、環境に応じて次の各項の手順を完了します。各項の一方の手順のみを完了すればよい場合と、両方の手順を完了する必要がある場合があります。
-
各実装済データベースには、「複数ソース環境の作成時の実装済データベースの構成」の手順を実行します。この手順は、環境に複数の実装済データベースが存在する場合にのみ必要です。
-
各インポート・データベースには、「新規環境作成時のインポート・データベースへのレプリケート・オブジェクトの追加」の手順を実行します。
3.2.1 複数ソース環境の作成時の実装済データベースの構成
環境に複数の実装済データベースが存在する場合は、「新規の複数ソースOracle Streams環境の作成」の手順を実行してから、実装済データベースについて次の手順を実行します。
3.2.2 新規環境作成時のインポート・データベースへのレプリケート・オブジェクトの追加
「新規の複数ソースOracle Streams環境の作成」の手順を完了した後に、インポート・データベースについて次の手順を実行します。
-
エクスポート・データベースとして使用する実装済データベースを選択します。まだインスタンス化は実行しないでください。
-
インポート・データベースごとに、インポート・データベースの宛先データベースとなる環境内の他のすべてのデータベースで、インスタンス化SCNを設定します。この場合、インポート・データベースがこれらの宛先データベースのソース・データベースになります。インスタンス化SCNを設定するデータベースには、実装済データベースと他のインポート・データベースが含まれることがあります。
-
インスタンス化中、またはその後のレプリケートされたDDLの変更によって、インポート・データベースで1つ以上のスキーマが作成される場合は、環境内の他のすべてのデータベースで、このインポート・データベースについて
DBMS_APPLY_ADM
パッケージのSET_GLOBAL_INSTANTIATION_SCN
プロシージャを実行します。 -
インポート・データベースにスキーマが存在し、インスタンス化中、またはその後のレプリケートDDLの変更によって、そのスキーマに1つ以上の表が作成される場合は、環境内の他のすべてのデータベースで、このインポート・データベースのスキーマについて
DBMS_APPLY_ADM
パッケージのSET_SCHEMA_INSTANTIATION_SCN
プロシージャを実行します。この操作は、この種のスキーマごとに行います。
手順については、「DBMS_APPLY_ADMパッケージを使用したインスタンス化SCNの設定」を参照してください。
これらのプロシージャは、インポート・データベースで表がインスタンス化される前に実行し、これらのインポート・データベースについてはローカルの取得プロセスまたは同期取得がすでに構成されているため、インスタンス化中に作成される表ごとに
SET_TABLE_INSTANTIATION_SCN
プロシージャを実行する必要はありません。インポート・データベースの宛先データベースとなる環境内の他のすべてのデータベースで、その表ごとにインスタンス化SCNが自動的に設定されます。 -
-
手順1で選択したエクスポート・データベースで、レプリケートされたデータベース・オブジェクトのエクスポートを実行します。次に、各インポート・データベースでレプリケート・オブジェクトのインポートを実行します。エクスポート/インポートの使用方法の詳細は、「インスタンス化とOracle Streamsレプリケーション」および『Oracle Databaseユーティリティ』を参照してください。
ソース・データベースでのデータベース・オブジェクトのエクスポート中、それらのデータベース・オブジェクトに対する変更は許可しないでください。宛先データベースでのデータベース・オブジェクトのインポート中、それらのデータベース・オブジェクトに対する変更は許可しないでください。
FLASHBACK_SCN
やFLASHBACK_TIME
などのエクスポート・パラメータを使用して、より厳密な一貫性レベルを指定できます。 -
エクスポート・データベース以外の実装済データベースごとに、実装済ソース・データベースの宛先データベースとなる各インポート・データベースにインスタンス化SCNを設定します。これらのインスタンス化SCNの設定は必須であり、実装済データベースで行われた、そのデータベースの対応するSCNより後にコミットされる変更のみがインポート・データベースに適用されます。
これらのインスタンス化SCNを設定するには、次の方法があります。
-
各実装済データベースでメタデータのみのエクスポートを実行し、そのメタデータを各インポート・データベースでインポートします。各インポートによって、実装済データベースに必須のインスタンス化SCNが、インポート・データベースで設定されます。この場合は、インポート・データベースのレプリケートされたデータベース・オブジェクトに、エクスポート時点で実装済データベースとの一貫性があることを確認してください。
DML変更のみを共有する場合は、表レベルのエクスポート/インポートで十分です。DDL変更も共有する場合は、追加の考慮事項があります。メタデータのエクスポート/インポートを実行する方法の詳細は、「エクスポート/インポートを使用したインスタンス化SCNの設定」を参照してください。
-
実装済データベースごとに、レプリケートされた各オブジェクトのインスタンス化SCNを各インポート・データベースで手動で設定します。各インポート・データベースのレプリケートされたデータベース・オブジェクトに、対応するインスタンス化SCNの時点で実装済データベースとの一貫性があることを確認してください。手順については、「DBMS_APPLY_ADMパッケージを使用したインスタンス化SCNの設定」を参照してください。
-
3.2.3 複数ソース環境の構成完了
この項の手順を完了する前に、次のタスクを完了している必要があります。
-
環境に複数の実装済データベースが存在する場合は、「複数ソース環境の作成時の実装済データベースの構成」
-
環境に1つ以上のインポート・データベースが存在する場合は、「新規環境作成時のインポート・データベースへのレプリケート・オブジェクトの追加」
前述の構成手順をすべて完了してから、次の手順を行います。
- 競合が発生する可能性がある場合は、各データベースで競合解消を構成します。手順については、「Oracle Streamsの競合解消」を参照してください。
DBMS_APPLY_ADM
パッケージのSTART_APPLY
プロシージャを使用して、環境内の各適用プロセスを起動します。DBMS_CAPTURE_ADM
パッケージのSTART_CAPTURE
プロシージャを使用して、環境内の各取得プロセスを起動します。
関連項目:
複数ソース環境を作成する場合の詳細な例は、『Oracle Streams拡張例』を参照してください。