この章では、柔軟な方法を使用した2つ以上のデータベース間でのOracle Streamsレプリケーションの構成について説明します。この章では、単一ソースまたは複数ソースのレプリケーション環境を構築するために各Oracle Streamsコンポーネントを構成する方法を手順ごとに説明します。
一般的なタイプの単一ソース・レプリケーション環境としては、レプリケートされたデータベース・オブジェクトへの変更がスポーク・データベースで許可されていないハブ・アンド・スポーク・レプリケーション環境があります。一般的なタイプの複数ソース・レプリケーション環境は、次のとおりです。
レプリケートされたデータベース・オブジェクトへの変更がスポーク・データベースで許可されているハブ・アンド・スポーク・レプリケーション環境
n-wayレプリケーション環境
可能な場合は、第6章「Oracle Streamsレプリケーションの簡単な構成」で説明した、簡単な方法を使用してOracle Streamsレプリケーションを構成することを検討してください。Enterprise ManagerのOracle StreamsツールまたはDBMS_STREAMS_ADM
パッケージの1つのプロシージャのみを使用して、2つのデータベースを含むレプリケーション環境内のすべてのOracle Streamsコンポーネントを構成できます。また、次のいずれかの簡単な方法を使用しても、レプリケーション環境のカスタム要件を満たすことができます。
構成スクリプトを生成し、要件を満たすようにスクリプトを変更します。
2つのデータベース間でOracle Streamsレプリケーションを構成し、第8章「Oracle Streamsレプリケーション環境への追加」の手順を実行して新しいデータベース・オブジェクトまたはデータベースを環境に追加します。
ただし、Oracle Streamsレプリケーションの構成で、簡単な方法より高い柔軟性が必要な場合は、この章の手順を実行して環境を構成します。
この章の内容は次のとおりです。
注意:
|
参照:
|
この項では、新規の単一ソースOracle Streams環境を作成する場合の一般的な手順について説明します。単一ソース環境とは、共有データのソース・データベースが1つのみの環境です。単一ソース環境に複数のソース・データベースが存在する場合もありますが、2つのソース・データベースが同じデータを取得することはありません。
新規のOracle Streams環境で取得プロセスを起動して同期取得を作成し、伝播を構成する前に、LCRを受信する伝播または適用プロセスが、これらのLCRを処理するように構成されていることを確認してください。つまり、伝播または適用プロセスが存在し、それぞれがLCRを適切に処理するルール・セットに関連付けられている必要があります。これらの伝播と適用プロセスがこれらのLCRを処理するように適切に構成されていないと、LCRが失われる可能性があります。
この例では、共有データベース・オブジェクトが接続先データベースで読取り専用であることを想定しています。共有オブジェクトが接続先データベースで読取り/書込み可能である場合、接続先データベースの共有オブジェクトに対して行われた変更をレプリケートするようにOracle Streamsが構成されないため、レプリケーション環境では同期状態が保たれません。
図7-1に、単一ソースのOracle Streamsレプリケーション環境の例を示します。
図7-1に示されているものより複雑なOracle Streams環境を作成することもできます。たとえば、単一ソースのOracle Streams環境ではダウンストリームの取得および有向ネットワークを使用できます。
通常、あるデータベースで共有オブジェクトに対する変更が取得されてから、リモート・データベースに伝播され、そこで適用される新規の単一ソースOracle Streams環境を構成する場合は、環境を次の順序で構成する必要があります。
次に示す必要なタスクを完了し、Oracle Streams用の環境内で各データベースを準備します。
Oracle Streams管理者の構成
Oracle Streamsに関連する初期化パラメータの設定
取得プロセスを実行するための各データベースの準備
ネットワーク接続性とデータベース・リンクの構成
これらのタスクの一部は、一部のデータベースでは不要な場合があります。
参照: Oracle Streams用のデータベースを準備する方法の詳細は、『Oracle Streams概要および管理』を参照してください。 |
必要なANYDATA
キューを作成します(存在しない場合)。取得プロセス、同期取得または適用プロセスを作成するときに、そのプロセスを特定のANYDATA
キューに関連付けます。伝播を作成するときには、その伝播を特定のソース・キューおよび宛先キューに関連付けます。手順については、「LCRをステージングするANYDATAキューの作成」を参照してください。
任意の共有オブジェクトについて、各ソース・データベースでサプリメンタル・ロギングを指定します。手順については、「Oracle Streamsレプリケーション環境内のサプリメンタル・ロギングの管理」を参照してください。
各データベースで、環境に必要な取得プロセス、同期取得、伝播および適用プロセスを作成します。取得プロセス、伝播および適用プロセスは任意の順序で作成できます。同期取得を作成する場合は、関連する伝播および適用プロセスの作成後に作成してください。
取得プロセスによって変更を取得する各データベースで、1つ以上の取得プロセスを作成します。各取得プロセスで、変更の取得に適切なルール・セットが使用されることを確認します。作成した取得プロセスは起動しないでください。各ソース・データベースには1つのみの取得プロセスを使用することをお薦めします。手順については、「取得プロセスの作成」を参照してください。
DBMS_STREAMS_ADM
パッケージのプロシージャを使用して取得プロセスのルールを追加すると、その取得プロセスがソース・データベースへのデータベース・リンクを持つローカル取得プロセスまたはダウンストリーム取得プロセスである場合は、指定した表、指定したスキーマまたはデータベース全体に対して、それぞれDBMS_CAPTURE_ADM
パッケージのPREPARE_TABLE_INSTANTIATION
、PREPARE_SCHEMA_INSTANTIATION
またはPREPARE_GLOBAL_INSTANTIATION
プロシージャが自動的に実行されます。
次のいずれかの条件に該当する場合は、適切なプロシージャを実行してインスタンス化の準備を手動で行う必要があります。
DBMS_RULE_ADM
パッケージを使用してルールを追加または変更する場合。
既存の取得プロセスを使用し、共有オブジェクトの取得プロセスのルールは追加しない場合。
ソース・データベースへのデータベース・リンクを持たないダウンストリーム取得プロセスを使用する場合。
インスタンス化の準備を手動で行う必要がある場合の手順については、「ソース・データベースでインスタンス化を行うためのデータベース・オブジェクトの準備」を参照してください。
取得LCRをソース・キューから宛先キューに伝播する伝播をすべて作成します。各伝播で変更の伝播に適切なルール・セットが使用されることを確認します。手順については、「LCRを伝播させる伝播の作成」を参照してください。
変更を適用する各データベースで、1つ以上の適用プロセスを作成します。各適用プロセスで、変更の適用に適切なルール・セットが使用されることを確認します。作成した適用プロセスは起動しないでください。手順については、「取得LCRを適用する適用プロセスの作成」を参照してください。
同期取得によって変更を取得する各データベースで、1つ以上の同期取得を作成します。各同期取得で、変更の取得に適切なルール・セットが使用されることを確認します。同期取得は、そのLCRを処理するすべての伝播および適用プロセスを作成するまで作成しないでください。手順については、「同期取得の作成」を参照してください。
DBMS_STREAMS_ADM
パッケージのプロシージャを使用して同期取得のルールを追加すると、指定した表に対してDBMS_CAPTURE_ADM
パッケージのPREPARE_SYNC_INSTANTIATION
ファンクションが自動的に実行されます。
適用プロセスによって変更が適用される各データベース・オブジェクトをインスタンス化するか、そのインスタンス化SCNを設定します。接続先データベースにデータベース・オブジェクトが存在しない場合は、エクスポート/インポート、トランスポータブル表領域またはRecovery Managerを使用してインスタンス化します。接続先データベースにデータベース・オブジェクトが存在する場合は、そのインスタンス化SCNを手動で設定します。
エクスポート/インポートを使用してデータベース・オブジェクトをインスタンス化するには、まずソース・データベースでそれらのデータベース・オブジェクトをエクスポートします。次に、接続先データベースでそれらのオブジェクトをインポートします。詳細は、「エクスポート/インポートを使用したインスタンス化SCNの設定」を参照してください。エクスポート/インポート、トランスポータブル表領域またはRecovery Managerを使用してオブジェクトをインスタンス化する方法の詳細は、「Oracle Streamsレプリケーション環境でのオブジェクトのインスタンス化」を参照してください。
ソース・データベースでのデータベース・オブジェクトのエクスポート中、それらのデータベース・オブジェクトに対する変更は許可しないでください。接続先データベースでのデータベース・オブジェクトのインポート中、それらのデータベース・オブジェクトに対する変更は許可しないでください。
FLASHBACK_SCN
やFLASHBACK_TIME
などのエクスポート・パラメータを使用して、より厳密な一貫性レベルを指定できます。
表、スキーマまたはデータベースのインスタンス化SCNを手動で設定するには、接続先データベースでDBMS_APPLY_ADM
パッケージの適切なプロシージャを1つ以上実行します。
SET_TABLE_INSTANTIATION_SCN
SET_SCHEMA_INSTANTIATION_SCN
SET_GLOBAL_INSTANTIATION_SCN
これらのプロシージャのいずれかを実行する場合は、接続先データベースの共有オブジェクトに、インスタンス化SCNの時点でソース・データベースとの一貫性があることを確認する必要があります。
接続先データベースでSET_GLOBAL_INSTANTIATION_SCN
を実行する場合、接続先データベースの各スキーマおよびそれらのスキーマが所有する表にもインスタンス化SCNが設定されるように、このプロシージャのrecursive
パラメータをTRUE
に設定します。
接続先データベースでSET_SCHEMA_INSTANTIATION_SCN
を実行する場合、スキーマ内の各表にもインスタンス化SCNが設定されるように、このプロシージャのrecursive
パラメータをTRUE
に設定します。
SET_GLOBAL_INSTANTIATION_SCN
プロシージャまたはSET_SCHEMA_INSTANTIATION_SCN
プロシージャでrecursive
パラメータをTRUE
に設定する場合は、接続先データベースからソース・データベースへのデータベース・リンクが必要です。このデータベース・リンクはソース・データベースのグローバル名と同じ名前であり、プロシージャを実行するユーザーからアクセス可能である必要があります。手順については、「DBMS_APPLY_ADMパッケージを使用したインスタンス化SCNの設定」を参照してください。
または、メタデータのエクスポート/インポートを実行して、既存のデータベース・オブジェクトについてインスタンス化SCNを設定できます。このオプションを選択した場合は、行がインポートされないことを確認してください。また、すべての接続先データベースの共有オブジェクトに、エクスポートを実行したソース・データベースとのエクスポート時点での一貫性があることを確認してください。DML変更のみを共有する場合は、表レベルのエクスポート/インポートで十分です。DDL変更も共有する場合は、追加の考慮事項があります。メタデータのエクスポート/インポートを実行する方法の詳細は、「エクスポート/インポートを使用したインスタンス化SCNの設定」を参照してください。
DBMS_APPLY_ADM
パッケージのSTART_APPLY
プロシージャを使用して、手順4で作成した各適用プロセスを起動します。
DBMS_CAPTURE_ADM
パッケージのSTART_CAPTURE
プロシージャを使用して、手順4で作成した各取得プロセスを起動します。
環境を構成するときには、取得プロセスおよび適用プロセスの作成時にこれらのプロセスが停止していることに注意してください。ただし、同期取得は作成すると即時に変更の取得を開始し、伝播は作成すると即時にLCRを伝播するようにスケジュールされます。取得プロセスまたは同期取得は、リモートの接続先データベースで関連オブジェクトをインスタンス化する前に作成する必要があります。取得プロセスの起動または同期取得の作成の前に伝播と適用プロセスを作成し、ストリーム全体を実行する前にオブジェクトをインスタンス化してください。
この項では、新規の複数ソースOracle Streams環境を作成する場合の一般的な手順について説明します。複数ソース環境とは、共有データに複数のソース・データベースが存在する環境です。
この例では、次の用語を使用しています。
実装済データベース: 新規の複数ソース環境を作成する前に、すでに共有データベース・オブジェクトが含まれているデータベース。新規のOracle Streams環境を作成するには、1つ以上の実装済データベースが必要です。
エクスポート・データベース: 共有データベース・オブジェクトのエクスポートを実行する実装済データベース。このエクスポートを使用して、インポート・データベースで共有データベース・オブジェクトがインスタンス化されます。すべてのデータベースが実装済データベースである環境では、エクスポート・データベースが存在しないことがあります。
インポート・データベース: 新規の複数ソース環境を作成する前には、共有データベース・オブジェクトが含まれていないデータベース。共有データベース・オブジェクトのインポートを実行して、そのデータベース・オブジェクトをインポート・データベースでインスタンス化します。すべてのデータベースが実装済データベースである環境では、インポート・データベースが存在しないことがあります。
図7-2に、複数ソースのOracle Streams環境の例を示します。
図7-2に示されているものより複雑なOracle Streams環境を作成することもできます。たとえば、複数ソースOracle Streams環境ではダウンストリームの取得および有向ネットワークを使用できます。
Oracle Streamsレプリケーション環境に複数のソース・データベースが存在する場合、変更の循環が発生する可能性があります。変更の循環は、変更が発生場所であるデータベースに再送されると発生します。通常は、変更の循環を回避する必要があります。レプリケーション環境を構成する前に、第4章「Oracle Streamsタグ」を参照して、変更の循環が回避されるようにレプリケーション環境を構成してください。
次の手順に従って新規の複数ソース環境を作成します。
注意: Oracle Streams環境に追加するデータベースでは、そのデータベースでのインスタンス化が完了するまでは、共有されるオブジェクトに対して変更が行われないことを確認してください。 |
次に示す必要なタスクを完了し、Oracle Streams用の環境内で各データベースを準備します。
Oracle Streams管理者の構成
Oracle Streamsに関連する初期化パラメータの設定
取得プロセスを実行するための各データベースの準備
ネットワーク接続性とデータベース・リンクの構成
これらのタスクの一部は、一部のデータベースでは不要な場合があります。
参照: Oracle Streams用のデータベースを準備する方法の詳細は、『Oracle Streams概要および管理』を参照してください。 |
各実装済データベースで、共有オブジェクトに必要なサプリメンタル・ロギングを指定します。手順については、「Oracle Streamsレプリケーション環境内のサプリメンタル・ロギングの管理」を参照してください。
必要なANYDATA
キューを作成します(存在しない場合)。取得プロセス、同期取得または適用プロセスを作成するときに、そのプロセスを特定のANYDATA
キューに関連付けます。伝播を作成するときには、その伝播を特定のソース・キューおよび宛先キューに関連付けます。手順については、「LCRをステージングするANYDATAキューの作成」を参照してください。
各データベースで、環境に必要な取得プロセス、同期取得、伝播および適用プロセスを作成します。取得プロセス、伝播および適用プロセスは任意の順序で作成できます。同期取得を作成する場合は、関連する伝播および適用プロセスの作成後に作成してください。
取得プロセスによって変更を取得する各データベースで、1つ以上の取得プロセスを作成します。各取得プロセスで、変更の取得に適切なルール・セットが使用されることを確認します。作成した取得プロセスは起動しないでください。各ソース・データベースには1つのみの取得プロセスを使用することをお薦めします。手順については、「取得プロセスの作成」を参照してください。
DBMS_STREAMS_ADM
パッケージのプロシージャを使用して取得プロセスのルールを追加すると、その取得プロセスがソース・データベースへのデータベース・リンクを持つローカル取得プロセスまたはダウンストリーム取得プロセスである場合は、指定した表、指定したスキーマまたはデータベース全体に対して、それぞれDBMS_CAPTURE_ADM
パッケージのPREPARE_TABLE_INSTANTIATION
、PREPARE_SCHEMA_INSTANTIATION
またはPREPARE_GLOBAL_INSTANTIATION
プロシージャが自動的に実行されます。
次のいずれかの条件に該当する場合は、適切なプロシージャを実行してインスタンス化の準備を手動で行う必要があります。
DBMS_RULE_ADM
パッケージを使用してルールを追加または変更する場合。
既存の取得プロセスを使用し、共有オブジェクトの取得プロセスのルールは追加しない場合。
ソース・データベースへのデータベース・リンクを持たないダウンストリーム取得プロセスを使用する場合。
インスタンス化の準備を手動で行う必要がある場合の手順については、「ソース・データベースでインスタンス化を行うためのデータベース・オブジェクトの準備」を参照してください。
取得LCRをソース・キューから宛先キューに伝播する伝播をすべて作成します。各伝播で変更の伝播に適切なルール・セットが使用されることを確認します。手順については、「LCRを伝播させる伝播の作成」を参照してください。
変更を適用する各データベースで、1つ以上の適用プロセスを作成します。各適用プロセスで、変更の適用に適切なルール・セットが使用されることを確認します。作成した適用プロセスは起動しないでください。手順については、「取得LCRを適用する適用プロセスの作成」を参照してください。
同期取得によって変更を取得する各データベースで、1つ以上の同期取得を作成します。各同期取得で、変更の取得に適切なルール・セットが使用されることを確認します。同期取得は、そのLCRを処理するすべての伝播および適用プロセスを作成するまで作成しないでください。手順については、「同期取得の作成」を参照してください。
DBMS_STREAMS_ADM
パッケージのプロシージャを使用して同期取得のルールを追加すると、指定した表に対してDBMS_CAPTURE_ADM
パッケージのPREPARE_SYNC_INSTANTIATION
ファンクションが自動的に実行されます。
前述の手順を完了してから、環境に応じて次の各項の手順を完了します。各項の一方の手順のみを完了すればよい場合と、両方の手順を完了する必要がある場合があります。
各実装済データベースには、「複数ソース環境の作成時の実装済データベースの構成」の手順を実行します。この手順は、環境に複数の実装済データベースが存在する場合にのみ必要です。
各インポート・データベースには、「新規環境作成時のインポート・データベースへの共有オブジェクトの追加」の手順を実行します。
環境に複数の実装済データベースが存在する場合は、「新規の複数ソースOracle Streams環境の作成」の手順を実行してから、実装済データベースについて次の手順を実行します。
実装済データベースごとに、実装済ソース・データベースの接続先データベースとなる環境内の他の各実装済データベースで、インスタンス化SCNを設定します。これらのインスタンス化SCNの設定は必須です。また、特定の実装済データベースで行われ、そのデータベースの対応するSCNより後にコミットされる変更のみが、他の実装済データベースで適用されます。
実装済データベースごとに、これらのインスタンス化SCNを次のいずれかの方法で設定できます。
実装済データベースで共有オブジェクトのメタデータのみのエクスポートを実行し、そのメタデータを他のそれぞれの実装済データベースでインポートします。このインポートによって、実装済データベースに必須のインスタンス化SCNが、他の実装済データベースで設定されます。行がインポートされないことを確認してください。また、メタデータのインポートを実行する各実装済データベースの共有オブジェクトに、メタデータのエクスポートを実行した実装済データベースとのエクスポート時点での一貫性があることを確認してください。
DML変更のみを共有する場合は、表レベルのエクスポート/インポートで十分です。DDL変更も共有する場合は、追加の考慮事項があります。メタデータのエクスポート/インポートを実行する方法の詳細は、「エクスポート/インポートを使用したインスタンス化SCNの設定」を参照してください。
他の各実装済データベースで、インスタンス化SCNを手動で設定します。この操作は共有オブジェクトごとに行います。各実装済データベースの共有オブジェクトに、そのデータベースで設定したインスタンス化SCNとの一貫性があることを確認してください。手順については、「DBMS_APPLY_ADMパッケージを使用したインスタンス化SCNの設定」を参照してください。
「新規の複数ソース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の設定」を参照してください。
この項の手順を完了する前に、次のタスクを完了している必要があります。
環境に複数の実装済データベースが存在する場合は、「複数ソース環境の作成時の実装済データベースの構成」
環境に1つ以上のインポート・データベースが存在する場合は、「新規環境作成時のインポート・データベースへの共有オブジェクトの追加」
前述の構成手順をすべて完了してから、次の手順を行います。
競合が発生する可能性がある場合は、各データベースで競合解消を構成します。手順については、「Oracle Streamsの競合検出および解消の管理」を参照してください。
DBMS_APPLY_ADM
パッケージのSTART_APPLY
プロシージャを使用して、環境内の各適用プロセスを起動します。
DBMS_CAPTURE_ADM
パッケージのSTART_CAPTURE
プロシージャを使用して、環境内の各取得プロセスを起動します。