ヘッダーをスキップ
Oracle Streamsレプリケーション管理者ガイド
11g リリース1(11.1)
E05776-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

6 Oracle Streamsレプリケーションの簡単な構成

この章では、簡単な方法を使用した2つのデータベース間でのOracle Streamsレプリケーションの構成について説明します。

この章の内容は次のとおりです。

Enterprise ManagerのOracle Streamsウィザードを使用したレプリケーションの構成

Enterprise ManagerのOracle Streamsツールには、Oracle Streamsレプリケーション環境を構成する2つのウィザードが含まれています。ここでは、ウィザードおよびそのオープン方法について説明します。

Oracle Streamsのグローバル、スキーマ、表およびサブセット・レプリケーション・ウィザード

Oracle Streamsのグローバル、スキーマ、表およびサブセット・レプリケーション・ウィザードでは、ソース・データベース全体、ソース・データベース内の特定のスキーマ、ソース・データベース内の特定の表またはソース・データベース内の表のサブセットに対する変更をレプリケートするOracle Streams環境を構成できます。

このウィザードでは、DML変更またはDDL変更(あるいはその両方)をメンテナンスするOracle Streams環境を構成できます。このウィザードでレプリケーションに対して構成したデータベース・オブジェクトは、ソース・データベースの複数の表領域に存在する場合があります。このウィザードでは、単一ソースのレプリーション環境のみを構成します。両方向のレプリケーション環境を構成することはできません。

このウィザードは、Database ControlまたはGrid Controlで実行できます。Database Controlでこのウィザードを実行するには、次の要件を満たす必要があります。

  • このウィザード、またはこのウィザードで生成されたスクリプトは、Oracle Database 10g リリース2(10.2)以上のデータベースで実行する必要があります。

  • このウィザードで構成した接続先データベースは、Oracle Database 10g リリース1(10.1)以上のデータベースである必要があります。

Grid Controlでこのウィザードを実行するには、次の要件を満たす必要があります。

  • このウィザード、またはこのウィザードで生成されたスクリプトは、Oracle9i リリース2(9.2)以上のデータベースで実行する必要があります。

  • このウィザードで構成した接続先データベースは、Oracle9i リリース2(9.2)以上のデータベースである必要があります。

図6-1に、Oracle Streamsのグローバル、スキーマ、表およびサブセット・レプリケーション・ウィザードの先頭ページを示します。

図6-1 Oracle Streamsのグローバル、スキーマ、表およびサブセット・レプリケーション・ウィザード

図6-1の説明が続きます。
図6-1「Oracle Streamsのグローバル、スキーマ、表およびサブセット・レプリケーション・ウィザード」の説明

Oracle Streamsの表領域レプリケーション・ウィザード

Oracle Streamsの表領域レプリケーション・ウィザードでは、特定の自己完結型の表領域または表領域セット内のすべてのデータベース・オブジェクトに対する変更をレプリケートするOracle Streams環境を構成できます。自己完結型の表領域には、その表領域の外部を指す表領域からの参照は含まれません。たとえば、表領域の索引が異なる表領域の表に対する索引である場合、その表領域は自己完結型ではありません。表領域セットに複数の表領域が存在する場合、自己完結型の表領域セットには、その表領域セットの外部を指す表領域セット内からの参照は含まれません。

このウィザードでは、単一ソースのレプリケーション環境または両方向のレプリケーション環境を構成できます。このウィザードでは、表領域セットまたは表領域セット内のデータベース・オブジェクトに対するDDL変更をメンテナンスするOracle Streams環境は構成されません。たとえば、表領域でALTER TABLESPACE文をレプリケートしたり、表領域の表でALTER TABLE文をレプリケートするようにOracle Streams環境は構成されません。

このウィザードは、Database ControlまたはGrid Controlで実行できます。Database Controlでこのウィザードを実行するには、次の要件を満たす必要があります。

  • このウィザード、またはこのウィザードで生成されたスクリプトは、Oracle Database 10g リリース2(10.2)以上のデータベースで実行する必要があります。

  • このウィザードでレプリケーション環境を(スクリプトを使用せずに)直接構成した場合、両方のデータベースがOracle Database 10g リリース2(10.2)以上のデータベースである必要があります。

  • このウィザードで生成されたスクリプトを使用してレプリケーション環境を構成した場合、接続先データベースはOracle Database 10g リリース1(10.1)以上のデータベースである必要があります。スクリプトでOracle Database 10g リリース1(10.1)データベースを構成する場合は、キュー・ツー・キュー伝播など、Oracle Database 10g リリース2(10.2)以上のみでサポートされる機能を構成しないようにスクリプトを変更する必要があります。

Grid Controlでこのウィザードを実行するには、次の要件を満たす必要があります。

  • このウィザード、またはこのウィザードで生成されたスクリプトで構成した各データベースは、Oracle Database 10g リリース1(10.1)以上のデータベースである必要があります。

  • このウィザード、またはこのウィザードで生成されたスクリプトは、Oracle Database 10g リリース1(10.1)以上のデータベースで実行する必要があります。

  • このウィザードをOracle Database 10g リリース2(10.2)以上のデータベースで実行し、ウィザードでレプリケーション環境を(スクリプトを使用せずに)直接構成した場合、両方のデータベースがOracle Database 10g リリース2(10.2)以上のデータベースである必要があります。

  • このウィザードをOracle Database 10g リリース2(10.2)以上のデータベースで実行し、生成されたスクリプトを使用してレプリケーション環境を構成した場合、接続先データベースがOracle Database 10g リリース1(10.1)以上のデータベースである必要があります。スクリプトでOracle Database 10g リリース1(10.1)データベースを構成する場合は、キュー・ツー・キュー伝播など、Oracle Database 10g リリース2(10.2)以上のみでサポートされる機能を構成しないようにスクリプトを変更する必要があります。

図6-2に、Oracle Streamsの表領域レプリケーション・ウィザードの先頭ページを示します。

図6-2 Oracle Streamsの表領域レプリケーション・ウィザード

図6-2の説明が続きます。
図6-2「Oracle Streamsの表領域レプリケーション・ウィザード」の説明

Oracle Streamsのレプリケーション構成ウィザードのオープン

どちらのウィザードでも、Oracle Streamsレプリケーション環境が構成されるか、またはOracle Streamsレプリケーション環境を構成するスクリプトが生成されます。取得プロセスは、ソース・データベースで指定された表領域のデータベース・オブジェクトに対する変更を取得するように構成されます。伝播は、ソース・データベースから接続先データベースに論理変更レコード(LCR)の形式で各変更を伝播するように、ソース・データベースで構成されます。接続先データベースの適用プロセスは、LCRを適用して接続先データベースで変更を行います。Oracle Streamsの表領域レプリケーション・ウィザードを使用して両方向のレプリケーション環境を構成した場合、各データベースは変更を取得して他のデータベースに伝播し、他のデータベースからの変更を適用します。また、どちらのウィザードでも、指定したデータベース・オブジェクトのインスタンス化が実行されます。

これらのウィザードのいずれかをオープンするには、Enterprise Managerで次の手順を実行します。

  1. Oracle Enterprise Managerで、SYSTEMなどの管理ユーザーとしてデータベースにログインします。レプリケーション環境でソース・データベースになるデータベースにログインします。

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

  3. 「データ移動」をクリックして、「データ移動」サブページを開きます。

  4. 「Streams」セクションの「設定」をクリックして、「Streams」ページを開きます。

  5. 「設定オプション」リストで使用するウィザードをクリックします。詳細を表示するには、「ヘルプ」をクリックします。


    注意:

    • 取得プロセスで取得されるREDOデータを生成するソース・データベースは、ARCHIVELOGモードで実行されている必要があります。

    • 両方向のレプリケーションを構成する場合、競合解消の構成が必要な場合があります。



    参照:


DBMS_STREAMS_ADMパッケージを使用したレプリケーションの構成

DBMS_STREAMS_ADMパッケージの次のプロシージャでは、Oracle Streamsによってメンテナンスされるレプリケーション環境が構成されます。

ここでは、これらのプロシージャのいずれかの実行を準備する手順および一般的な使用例を示します。


参照:

これらのプロシージャの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

DBMS_STREAMS_ADMパッケージを使用したOracle Streamsレプリケーションの構成の準備

ここでは、DBMS_STREAMS_ADMパッケージのプロシージャを使用してレプリケーションを構成する前に行う決定および実行する操作について説明します。

Oracle Streamsレプリケーションを構成する前に行う決定

Oracle Streamsレプリケーションを構成する前に、次の決定を行います。

DDL変更をメンテナンスするかどうかの決定

この項のプロシージャを使用すると、デフォルトで、指定されたデータベース・オブジェクトに対するデータ操作言語(DML)変更をメンテナンスするように、レプリケーション環境が構成されます。DML変更には、INSERTUPDATEDELETEおよびLOBの更新操作が含まれます。レプリケーション環境でデータ定義言語(DDL)変更もメンテナンスするかどうかを決定する必要があります。DDL変更が発生する文には、CREATE TABLEALTER TABLEALTER TABLESPACEALTER DATABASEなどがあります。

一部のOracle Streamsレプリケーション環境では、各データベースに同じデータベース・オブジェクトが存在すると想定されます。この場合、Oracle Streamsを使用してDDL変更をメンテナンスすると、共有データベース・オブジェクトを簡単に同期化できます。ただし、一部のOracle Streamsレプリケーション環境では、データベースによって共有データベース・オブジェクトが異なる必要があります。たとえば、2つの異なるデータベースで、ある表の名前または形状が異なっている場合があります。これらの環境では、ルールベースの変換および適用ハンドラを使用して、データベース間で共有可能になるように変更を変換できるため、Oracle Streamsを使用してDDL変更をメンテナンスする必要はありません。

include_ddlパラメータは、DDL変更をメンテナンスするようにプロシージャでOracle Streamsレプリケーションを構成するかどうかを制御します。

  • DDL変更をメンテナンスしないOracle Streamsレプリケーション環境を構成するには、この項のいずれかのプロシージャを実行する際に、include_ddlパラメータをFALSEに設定します。このパラメータのデフォルト値はFALSEです。

  • DDL変更をメンテナンスするOracle Streamsレプリケーション環境を構成するには、この項のいずれかのプロシージャを実行する際に、include_ddlパラメータをTRUEに設定します。


注意:

MAINTAIN_SIMPLE_TTSプロシージャにはinclude_ddlパラメータは含まれません。MAINTAIN_SIMPLE_TTSプロシージャで構成するOracle Streamsレプリケーション環境では、DML変更のみがメンテナンスされます。


参照:


ソース・データベースに対してローカル取得またはダウンストリーム取得を構成するかどうかの決定

ローカル取得とは、ソース・データベース上で取得プロセスが実行されることを意味します。ダウンストリーム取得とは、ソース・データベース以外のデータベース上で取得プロセスが実行されることを意味します。この項のプロシージャでは、source_databaseパラメータに指定したデータベースに対してローカル取得またはダウンストリーム取得のいずれかを構成できます。

ソース・データベースに対する変更を取得するデータベースは、取得データベースと呼ばれます。この項のプロシージャでは、次のいずれかのデータベースを取得データベースとして構成できます。

  • ソース・データベース(ローカル取得)

  • 接続先データベース(ダウンストリーム取得)

  • 第3のデータベース(ダウンストリーム取得)

図6-3に、取得データベースのロールを示します。

図6-3 取得データベース

図6-3の説明が続きます。
図6-3「取得データベース」の説明

プロシージャが実行されるデータベースは、ソース・データベースに対する変更の取得データベースとして構成されます。そのため、ソース・データベースでのローカル取得を構成するには、ソース・データベースでプロシージャを実行します。接続先データベースまたは第3のデータベースでのダウンストリーム取得を構成するには、接続先データベースまたは第3のデータベースでプロシージャを実行します。

ソース・データベースまたは第3のデータベースを取得データベースに使用する場合、この項のプロシージャでは、取得データベースから接続先データベースに変更を伝播するように伝播が構成されます。接続先データベースを取得データベースに使用して、両方向のレプリケーションを構成しない場合、データベース間でのこの伝播は不要です。この場合、capture_queue_nameapply_queue_nameが同じであると、伝播は構成されません。

また、次の両方の条件に該当する場合、capture_nameおよびcapture_queue_nameパラメータをNULLに設定する必要があります。

  • 接続先データベースを取得データベースに使用する。

  • bi_directionalパラメータがTRUEに設定されている。

これらの両方の条件に該当する場合、この項のプロシージャでは接続先データベースで2つの取得プロセスが構成されます。これらの取得プロセスには異なる名前を付ける必要があります。capture_nameおよびcapture_queue_nameパラメータがNULLに設定されている場合、これらの取得プロセスに対してシステムによって異なる名前が生成されます。両方の条件に該当し、capture_nameパラメータまたはcapture_queue_nameパラメータのいずれかがNULL以外の値に設定されている場合、この項のプロシージャでエラーが発生します。


注意:

  • この項のプロシージャでダウンストリーム取得を構成すると、常にアーカイブ・ログ・ダウンストリーム取得が構成されます。これらのプロシージャでは、リアルタイム・ダウンストリーム取得は構成されません。ただし、プロシージャを実行する前にリアルタイム・ダウンストリーム取得用のREDO転送サービスを構成して、プロシージャの完了後にdownstream_real_time_mine取得プロセス・パラメータをYに設定することができます。また、これらのプロシージャによって生成されるスクリプトを、リアルタイム・ダウンストリーム取得を構成するように変更することもできます。

  • この項のプロシージャで両方向のレプリケーションを構成する場合、接続先データベースの取得プロセスは、常にローカル取得プロセスになります。つまり、これらのプロシージャでは、常に接続先データベースに対する変更の取得プロセスが接続先データベースで実行されるように構成されます。

  • 同期取得は構成プロシージャでは構成できません。



参照:

  • ローカル取得およびダウンストリーム取得の詳細は、『Oracle Streams概要および管理』を参照してください。

  • リアルタイム・ダウンストリームの取得プロセスを使用するOracle Streamsレプリケーション環境を構成するためにMAINTAIN_SCHEMASプロシージャを使用する例については、『Oracle Database 2日でデータ・レプリケーションおよび統合ガイド』を参照してください。

  • 「レプリケーションを両方向にするかどうかの決定」


レプリケーションを両方向にするかどうかの決定

この項のプロシージャでは、source_databaseパラメータで指定されたデータベースをソース・データベースとする単一ソースのOracle Streams構成、または両方のデータベースをソース・データベースと接続先データベースとする両方向のOracle Streams構成のいずれかが設定されます。Oracle Streams構成を単一ソースとするか両方向とするかは、各プロシージャのbi_directionalパラメータで制御されます。

  • bi_directionalパラメータをFALSEに指定した場合、取得プロセスがソース・データベースに対する変更を取得し、適用プロセスが接続先データベースでそれらの変更を適用します。接続先データベースを取得データベースに使用しない場合、伝播によって、取得された変更が接続先データベースに伝播されます。このパラメータのデフォルト値はFALSEです。

  • bi_directionalパラメータをTRUEに指定した場合、個別の取得プロセスが各データベースに対する変更を取得し、伝播によってこれらの変更が他のデータベースに伝播され、各データベースで他のデータベースからの変更が適用されます。

レプリケーション環境が両方向ではなく、接続先データベースで変更が許可されていない場合、Oracle Streamsはデータベース間で共有データベース・オブジェクトの同期化を保持します。ただし、レプリケーション環境が両方向ではなく、接続先データベースで独立した変更が許可されている場合、データベース間で共有データベース・オブジェクトが異なる場合があります。独立した変更は、ユーザー、アプリケーション、または第3のデータベースを含むレプリケーションによって行われます。

この項のプロシージャを使用して、環境内の第3のデータベースによってソース・データベースに変更が循環される複数方向のレプリケーションを構成することはできません。たとえば、これらのプロシージャを使用して、3つのデータベースによってそれぞれ環境内の他の2つのデータベースと変更が共有されるOracle Streamsレプリケーション環境を構成することはできません。これらのプロシージャを使用してこのような3方向のレプリケーション環境を構成すると、ソース・データベースに加えられた変更は、同じソース・データベースに循環されます。有効な3方向のレプリケーション環境では、特定の変更は各データベースに一度のみ行われます。ただし、いずれかのプロシージャを使用してOracle Streams環境を構成した後、この環境にデータベースを追加できます。また、これらのプロシージャを使用してハブ・アンド・スポーク・レプリケーション環境を構成できます。


注意:

  • この項のいずれかのプロシージャを実行する際にbi_directionalパラメータをTRUEに設定した場合、プロシージャまたはプロシージャによって生成されたスクリプトの実行中に、接続先データベースの共有データベース・オブジェクトに対するデータ操作言語(DML)変更またはデータ定義言語(DDL)変更を許可しないでください。プロシージャで単一ソース・レプリケーション環境を構成する場合は、この制限は適用されません。

  • 両方向のレプリケーションを構成する場合、競合解消の構成が必要な場合があります。

  • これらのプロシージャでは、レプリケート表は接続先データベースで読取り専用に構成されません。これらのいずれかのプロシージャを実行する際にbi_directionalパラメータをFALSEに設定し、レプリケート表を接続先データベースで読取り専用にする場合は、必要に応じて接続先データベースで権限を構成してください。ただし、適用プロセスの適用ユーザーは、レプリケートされたデータベース・オブジェクトに対するDML変更を行うことができる必要があります。権限を構成する方法は、『Oracle Databaseセキュリティ・ガイド』を参照してください。


レプリケーションを直接構成するかスクリプトを生成するかの決定

この項のプロシージャでは、Oracle Streamsレプリケーション環境を直接構成するか、または環境を構成するスクリプトを生成できます。スクリプトを実行するよりプロシージャを使用してレプリケーションを直接構成する方が簡単で、環境が即時に構成されます。ただし、次の理由でスクリプトを生成することもあります。

  • 環境を構成する前にプロシージャによって実行される操作を確認する必要がある。

  • 構成をカスタマイズするためにスクリプトを変更する必要がある。

たとえば、適用プロセスで、特定の表に変更を適用する前に、適用ハンドラを使用してこれらの変更にカスタマイズされた処理を行う場合があります。この場合、プロシージャを使用してスクリプトを生成し、適用ハンドラを追加するようにスクリプトを変更できます。

また、多数の表に対するDML変更をメンテナンスするが、これらの表のサブセットに対してのみDDL変更をメンテナンスする場合があります。この場合、include_ddlパラメータをFALSEに設定してMAINTAIN_TABLESプロシージャを実行することによって、スクリプトを生成できます。適切な表に対するDDL変更をメンテナンスするようにスクリプトを変更できます。

perform_actionsパラメータは、プロシージャでレプリケーション環境を直接構成するかどうかを制御します。

  • この項のいずれかのプロシージャを実行する際にOracle Streams環境を直接構成する場合は、perform_actionsパラメータをTRUEに設定します。このパラメータのデフォルト値はTRUEです。

  • この項のいずれかのプロシージャを実行する際に構成スクリプトを生成する場合は、perform_actionsパラメータをFALSEに設定し、script_nameおよびscript_directory_objectパラメータを使用して構成スクリプトの名前と格納場所を指定します。

インスタンス化の実行方法の決定

MAINTAIN_GLOBALMAINTAIN_SCHEMASおよびMAINTAIN_TABLESプロシージャでは、インスタンス化のオプションが提供されます。インスタンス化とは、ソース・データベースでデータベース・オブジェクトをインスタンス化のために準備するプロセスです。オプションで、データベース・オブジェクトをソース・データベースから接続先データベースにコピーしたり、インスタンス化された各データベース・オブジェクトにインスタンス化SCNを設定します。

これら3つのプロシージャのいずれかを実行する場合、次のいずれかの方法でインスタンス化を実行するように選択できます。

  • データ・ポンプ・エクスポート・ダンプ・ファイルによるインスタンス化: このオプションでは、ソース・データベースで共有データベース・オブジェクトにデータ・ポンプでのエクスポートが実行され、接続先データベースでエクスポート・ダンプ・ファイルのデータ・ポンプでのインポートが実行されます。インポート時に各共有データベース・オブジェクトに対してインスタンス化SCNが設定されます。

    このインスタンス化オプションを指定するには、instantiationパラメータを次のいずれかの値に設定します。

    • MAINTAIN_GLOBALプロシージャを実行する場合はDBMS_STREAMS_ADM.INSTANTIATION_FULL

    • MAINTAIN_SCHEMASプロシージャを実行する場合はDBMS_STREAMS_ADM.INSTANTIATION_SCHEMA

    • MAINTAIN_TABLESプロシージャを実行する場合はDBMS_STREAMS_ADM.INSTANTIATION_TABLE

    bi_directionalパラメータがTRUEに設定されている場合、プロシージャでは、ソース・データベースの各共有データベース・オブジェクトに対してもインスタンス化SCNが設定されます。

  • データ・ポンプでのネットワーク・インポートによるインスタンス化: このオプションでは、共有データベース・オブジェクトのデータ・ポンプでのネットワーク・インポートが実行されます。ネットワーク・インポートとは、エクスポート・ダンプ・ファイルを使用せずにデータ・ポンプでインポートを実行することを意味します。したがって、このオプションを使用する場合、インスタンス化のためにディレクトリ・オブジェクトを作成する必要はありません。インポート時に各共有データベース・オブジェクトに対してインスタンス化SCNが設定されます。

    このインスタンス化オプションを指定するには、instantiationパラメータを次のいずれかの値に設定します。

    • MAINTAIN_GLOBALプロシージャを実行する場合はDBMS_STREAMS_ADM.INSTANTIATION_FULL_NETWORK

    • MAINTAIN_SCHEMASプロシージャを実行する場合はDBMS_STREAMS_ADM.INSTANTIATION_SCHEMA_NETWORK

    • MAINTAIN_TABLESプロシージャを実行する場合はDBMS_STREAMS_ADM.INSTANTIATION_TABLE_NETWORK

    bi_directionalパラメータがTRUEに設定されている場合、プロシージャでは、ソース・データベースの各共有データベース・オブジェクトに対してもインスタンス化SCNが設定されます。

  • インスタンス化を指定しない構成スクリプトの生成: このオプションでは、インスタンス化は実行されません。この設定は、perform_actionsパラメータがFALSEに設定されており、プロシージャで構成スクリプトを生成する場合にのみ有効です。この場合、構成スクリプトではインスタンス化が実行されず、各共有データベース・オブジェクトに対してインスタンス化SCNが設定されません。かわりに、自分でインスタンス化を実行し、インスタンス化SCNの値が適切に設定されていることを確認する必要があります。

    このインスタンス化オプションを指定するには、各プロシージャでinstantiationパラメータをDBMS_STREAMS_ADM.INSTANTIATION_NONEに設定します。

これらのプロシージャでダンプ・ファイルまたはネットワークのインスタンス化を実行すると、インスタンス化されたデータベース・オブジェクトが接続先データベースに存在しない場合、接続先データベースにデータベース・オブジェクトがインポートされます。これには、ソース・データベースからのサプリメンタル・ロギング指定およびサポート・データベース・オブジェクト(索引、トリガーなど)が含まれます。ただし、インスタンス化の実行前に接続先データベースにデータベース・オブジェクトが存在する場合は、接続先データベースにデータベース・オブジェクトはインポートされません。したがって、ソース・データベースからのサプリメンタル・ロギング指定は接続先データベースのデータベース・オブジェクトに指定されず、サポート・データベース・オブジェクトもインポートされません。

PRE_INSTANTIATION_SETUPおよびPOST_INSTANTIATION_SETUPプロシージャでは、インスタンス化が実行されません。必要なインスタンス化操作を、PRE_INSTANTIATION_SETUPの実行後およびPOST_INSTANTIATION_SETUPの実行前に手動で実行する必要があります。また、instantiationパラメータをDBMS_STREAMS_ADM.INSTANTIATION_NONEに設定してMAINTAIN_GLOBALMAINTAIN_SCHEMASおよびMAINTAIN_TABLESプロシージャを使用した場合も、必要なインスタンス化操作を手動で実行する必要があります。

これらの場合、任意のインスタンス化方法を使用できます。たとえば、Recovery ManagerのDUPLICATEまたはCONVERT DATABASEコマンドを使用してデータベースをインスタンス化したり、Recovery ManagerのTRANSPORT TABLESPACEコマンドを使用して表領域をインスタンス化することができます。bi_directionalパラメータがTRUEに設定されている場合、接続先データベースのみでなくソース・データベースでもインスタンス化SCNの値が適切に設定されていることを確認します。


注意:

  • MAINTAIN_SIMPLE_TTSおよびMAINTAIN_TTSプロシージャでは、これらのインスタンス化オプションは提供されません。これらのプロシージャでは、表領域または表領域セットがクローニングされ、インスタンス化に必要なファイルが接続先データベースに送信され、接続先データベースで表領域または表領域セットがアタッチされることによって、常にインスタンス化が実行されます。

  • これらのいずれかのプロシージャでインスタンス化を実行する場合は、ソース・データベースにレプリケーションに対して構成するデータベース・オブジェクト、表領域または表領域セットが存在している必要があります。

  • データベースのインスタンス化にRecovery ManagerのDUPLICATEまたはCONVERT DATABASEコマンドを使用する場合、接続先データベースを取得データベースに使用できません。

  • MAINTAIN_TABLESプロシージャでダンプ・ファイルまたはネットワークのインスタンス化を実行すると、インスタンス化の実行前にインスタンス化された表が接続先データベースに存在する場合は、このプロシージャによって表に対するインスタンス化SCNは設定されません。この場合は、プロシージャの完了後に表に対するインスタンス化SCNを手動で設定する必要があります。


Oracle Streamsレプリケーションを構成する前に実行するタスク

ここでは、Oracle Streamsレプリケーションを構成する前に実行するタスクについて説明します。

すべてのデータベースでのOracle Streams管理者の構成

各データベースのOracle Streams管理者は、構成操作を実行するために必要な権限を持っている必要があります。この章の例では、各データベースのOracle Streams管理者のユーザー名がstrmadminであると想定しています。


参照:

Oracle Streams管理者を構成する方法は、『Oracle Streams概要および管理』を参照してください。

1つ以上のデータベース・リンクの作成

この項のいずれかのプロシージャを実行するには、ソース・データベースから接続先データベースへのデータベース・リンクが常に必要です。次のいずれかの場合、接続先データベースからソース・データベースへのデータベース・リンクが必要です。

  • Oracle Streamsレプリケーション環境を両方向にする場合。

  • インスタンス化中にデータ・ポンプでのネットワーク・インポートを実行する場合。

  • 接続先データベースを、ソース・データベースに対する変更のダウンストリーム取得の取得データベースに使用する場合。

  • データベースのインスタンス化にRecovery ManagerのDUPLICATEまたはCONVERT DATABASEコマンドを使用する場合。

    instantiation_scnパラメータをNULL以外の値に設定してPOST_INSTANTIATION_SETUPプロシージャを実行すると、接続先データベースでDBMS_APPLY_ADMパッケージのSET_GLOBAL_INSTANTIATION_SCNプロシージャが実行されるため、このデータベース・リンクが必要になります。SET_GLOBAL_INSTANTIATION_SCNプロシージャにはこのデータベース・リンクが必要です。このデータベース・リンクは、Recovery Managerによるインスタンス化の実行後、POST_INSTANTIATION_SETUPプロシージャを実行する前に作成する必要があります。

第3のデータベースをソース・データベースに対する変更のダウンストリーム取得の取得データベースに使用する場合は、次のデータベース・リンクも必要です。

  • 第3のデータベースからソース・データベースへのデータベース・リンク。

  • 第3のデータベースから接続先データベースへのデータベース・リンク。

各データベース・リンクは、Oracle Streams管理者のスキーマに作成する必要があります。たとえば、ソース・データベースがstm1.net、接続先データベースがstm2.net、各データベースのOracle Streams管理者がstrmadminである場合、次の文を実行すると、ソース・データベースから接続先データベースへのデータベース・リンクが作成されます。

CONNECT strmadmin@stm1.net
Enter password: password

CREATE DATABASE LINK stm2.net CONNECT TO strmadmin IDENTIFIED BY password
   USING 'stm2.net';

接続先データベースからソース・データベースへのデータベース・リンクが必要な場合、次の文を実行すると、このデータベース・リンクが作成されます。

CONNECT strmadmin@stm2.net
Enter password: password

CREATE DATABASE LINK stm1.net CONNECT TO strmadmin IDENTIFIED BY password
   USING 'stm1.net';

第3のデータベースを取得データベースに使用する場合、第3のデータベースからソース・データベースおよび接続先データベースへのデータベース・リンクが必要です。たとえば、第3のデータベースがstm3.netの場合、次の文を実行すると、第3のデータベースからソース・データベースおよび接続先データベースへのデータベース・リンクが作成されます。

CONNECT strmadmin@stm3.net
Enter password: password

CREATE DATABASE LINK stm1.net CONNECT TO strmadmin IDENTIFIED BY password
   USING 'stm1.net';

CREATE DATABASE LINK stm2.net CONNECT TO strmadmin IDENTIFIED BY password
   USING 'stm2.net';

Recovery Managerを使用してデータベースのインスタンス化を実行した場合、インスタンス化中にソース・データベースのデータベース・リンクが接続先データベースにコピーされます。このコピーされたデータベース・リンクは、接続先データベースで削除する必要があります。この場合、レプリケーションが両方向で、接続先データベースからソース・データベースへのデータベース・リンクが必要な場合、インスタンス化後にこのデータベース・リンクを作成する必要があります。

必要なディレクトリ・オブジェクトの作成

ディレクトリ・オブジェクトは、ファイル・システム上のディレクトリの別名に類似しています。この項のいずれかのプロシージャを実行する場合、次のディレクトリ・オブジェクトが必要になる場合があります。

  • スクリプト・ディレクトリ・オブジェクト。これは、構成スクリプトを生成する場合に必要です。構成スクリプトは、プロシージャが実行されるコンピュータ・システム上のこのディレクトリに格納されます。この項のいずれかのプロシージャを実行してスクリプト・ディレクトリ・オブジェクトを指定する場合、script_directory_objectパラメータを使用します。

  • ソース・ディレクトリ・オブジェクト。これは、データ・ポンプ・エクスポート・ダンプ・ファイルによるインスタンス化を実行し、MAINTAIN_GLOBALMAINTAIN_SCHEMASMAINTAIN_SIMPLE_TTSMAINTAIN_TABLESまたはMAINTAIN_TTSのいずれかのプロシージャを使用する場合に必要です。データ・ポンプ・エクスポート・ダンプ・ファイルおよびログ・ファイルは、ソース・データベースが実行されるコンピュータ・システム上のこのディレクトリに格納されます。これらのいずれかのプロシージャを実行してソース・ディレクトリ・オブジェクトを指定する場合、source_directory_objectパラメータを使用します。PRE_INSTANTIATION_SETUPおよびPOST_INSTANTIATION_SETUPプロシージャを使用する場合、このディレクトリ・オブジェクトは不要です。

  • 接続先ディレクトリ・オブジェクト。これは、データ・ポンプ・エクスポート・ダンプ・ファイルによるインスタンス化を実行し、MAINTAIN_GLOBALMAINTAIN_SCHEMASMAINTAIN_SIMPLE_TTSMAINTAIN_TABLESまたはMAINTAIN_TTSのいずれかのプロシージャを使用する場合に必要です。ソース・データベースが実行されているコンピュータ・システムから接続先データベースが実行されているコンピュータ・システムにデータ・ポンプ・エクスポート・ダンプ・ファイルが転送され、接続先データベースが実行されているコンピュータ・システム上のこのディレクトリに格納されます。これらのプロシージャのいずれかを実行して接続先ディレクトリ・オブジェクトを指定する場合、destination_directory_objectパラメータを使用します。PRE_INSTANTIATION_SETUPおよびPOST_INSTANTIATION_SETUPプロシージャを使用する場合、このディレクトリ・オブジェクトは不要です。

各ディレクトリ・オブジェクトは、SQL文CREATE DIRECTORYを使用して作成する必要があります。また、いずれかのプロシージャをコールするユーザーは、各ディレクトリ・オブジェクトに対するREADおよびWRITE権限を持っている必要があります。たとえば、次の文を実行すると、/usr/db_filesディレクトリに対応するディレクトリ・オブジェクトdb_files_directoryが作成されます。

CREATE DIRECTORY db_files_directory AS '/usr/db_files';

このディレクトリ・オブジェクトはOracle Streams管理者(strmadmin)によって作成されているため、このユーザーにはディレクトリ・オブジェクトに対するREADおよびWRITE権限が自動的に付与されます。

各ソース・データベースがARCHIVELOGモードであることの確認

この項のいずれかのプロシージャ(またはこれらのプロシージャのいずれかによって生成されたスクリプト)を実行する前に、各ソース・データベースがARCHIVELOGモードで実行されている必要があります。ソース・データベースは、取得プロセスによって取得される変更を生成するデータベースです。ソース・データベースは、常に、ARCHIVELOGモードである必要があります。プロシージャで両方向のレプリケーション環境を構成する場合、接続先データベースもARCHIVELOGモードである必要があります。


参照:


ダウンストリーム取得データベースへのログ・ファイルの転送の構成

ソース・データベースでのローカル取得プロセスを使用するように決定した場合、ログ・ファイルを転送する必要はありません。ただし、ソース・データベースに対してダウンストリーム取得を使用するように決定した場合は、プロシージャを実行する前に、ソース・データベースから取得データベースへのログ・ファイルの転送を構成します。

次の手順を実行して、ソース・データベースのREDOログ・ファイルを取得データベースに転送するための準備、および取得データベースでそれらのREDOログ・ファイルを受け入れるための準備を行います。

  1. ソース・データベースが取得データベースと通信できるように、Oracle Netを構成します。


    参照:

    『Oracle Database Net Services管理者ガイド』

  2. 両方のデータベースで、REDOデータの転送がサポートされるように認証を構成します。

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


    参照:

    REDO転送の認証要件の詳細は、『Oracle Data Guard概要および管理』を参照してください。

  3. ソース・データベースからダウンストリーム・データベースにREDOデータを転送するREDO転送サービスを構成するために、ソース・データベースで次の初期化パラメータを設定します。

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

      • 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)のいずれかを指定します。

      • TEMPLATE: アーカイブ・ログ・ダウンストリームの取得プロセスを構成するときには、ダウンストリーム・データベースでアーカイブREDOログ用のディレクトリおよびフォーマット・テンプレートを指定します。TEMPLATE属性は、ダウンストリーム・データベースのLOG_ARCHIVE_FORMAT初期化パラメータ設定を上書きします。TEMPLATE属性は、リモートの接続先でのみ有効です。各ソース・データベースで、フォーマットに%t%sおよび%rのすべての変数を使用していることを確認します。

        リアルタイム・ダウンストリームの取得プロセスを構成するときには、TEMPLATE属性を指定しないでください。

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

      次に、リアルタイム・ダウンストリームの取得プロセスにダウンストリーム・データベースを指定するLOG_ARCHIVE_DEST_n設定の例を示します。

      LOG_ARCHIVE_DEST_2='SERVICE=STM2.NET ASYNC NOREGISTER
         VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
         DB_UNIQUE_NAME=stm2'
      

      注意:

      構成プロシージャでは、リアルタイム・ダウンストリーム取得ではなく、常にアーカイブ・ログ・ダウンストリーム取得が構成されます。ただし、プロシージャを実行する前にリアルタイム・ダウンストリーム取得用のREDO転送サービスを構成して、プロシージャの完了後にdownstream_real_time_mine取得プロセス・パラメータをYに設定することができます。また、これらのプロシージャによって生成されるスクリプトを、リアルタイム・ダウンストリーム取得を構成するように変更することもできます。リアルタイム・ダウンストリームの取得プロセスを使用するOracle Streamsレプリケーション環境を構成するためにMAINTAIN_SCHEMASプロシージャを使用する例については、『Oracle Database 2日でデータ・レプリケーションおよび統合ガイド』を参照してください。

      次に、アーカイブ・ログ・ダウンストリームの取得プロセスにダウンストリーム・データベースを指定するLOG_ARCHIVE_DEST_n設定の例を示します。

      LOG_ARCHIVE_DEST_2='SERVICE=STM2.NET ASYNC NOREGISTER
         VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
         TEMPLATE=/usr/oracle/log_for_stm1/stm1_arch_%t_%s_%r.log
         DB_UNIQUE_NAME=stm2'
      

      注意:

      リモート・ソース・データベースからのログ・ファイルをローカル・データベースのログ・ファイルとは別に格納するように、TEMPLATE属性の値を指定します。また、ダウンストリーム・データベースに複数のソース・データベースからのログ・ファイルが含まれている場合、各ソース・データベースからのログ・ファイルを個別に格納する必要があります。

    • 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_UNIQUE_NAMEを含めるように、この初期化パラメータのDB_CONFIG属性を設定します。

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

      LOG_ARCHIVE_CONFIG='DG_CONFIG=(stm1,stm2)'
      

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


    参照:

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

  4. ダウンストリーム・データベースで、ソース・データベースとダウンストリーム・データベースのDB_UNIQUE_NAMEを含めるように、LOG_ARCHIVE_CONFIG初期化パラメータのDB_CONFIG属性を設定します。

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

    LOG_ARCHIVE_CONFIG='DG_CONFIG=(stm1,stm2)'
    

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

  5. 手順3または手順4で、データベース上でインスタンスを実行中に初期化パラメータをリセットした場合、データベースが再起動されたときに新しい値が保持されるように、それらのパラメータを初期化パラメータ・ファイルでもリセットする必要があります。

    手順3または手順4で、インスタンスの実行中に初期化パラメータをリセットせず、初期化パラメータ・ファイルでリセットした場合は、データベースを再起動します。ソース・データベースから取得データベースにREDOログ・ファイルを送信するには、ソース・データベースがオープンされている必要があります。これは、ソース・データベースのグローバル名は、ソース・データベースがオープンである場合にのみ取得データベースに送信されるためです。

初期化パラメータが適切に設定されていることの確認

特定の初期化パラメータは、Oracle Streams環境で重要です。いずれかのプロシージャを実行する前に、すべてのデータベースで初期化パラメータが適切に設定されていることを確認してください。


参照:

Oracle Streams環境で重要な初期化パラメータについては、『Oracle Streams概要および管理』を参照してください。

DBMS_STREAMS_ADMパッケージを使用したデータベース・レプリケーションの構成

DBMS_STREAMS_ADMパッケージの次のプロシージャを使用すると、データベース・レプリケーションを構成できます。

  • MAINTAIN_GLOBAL

  • PRE_INSTANTIATION_SETUPおよびPOST_INSTANTIATION_SETUP

MAINTAIN_GLOBALプロシージャでは、Oracle Streamsによってサポートされていないデータベース・オブジェクトがレプリケーション環境からは自動的に除外されます。PRE_INSTANTIATION_SETUPおよびPOST_INSTANTIATION_SETUPプロシージャでは、データベース・オブジェクトが自動的に除外されません。かわりに、これらのプロシージャを使用すると、レプリケーション環境から除外するデータベース・オブジェクトを指定できます。Oracle Streamsによってサポートされていないデータベース・オブジェクトを判別するには、DBA_STREAMS_UNSUPPORTEDデータ・ディクショナリ・ビューを問い合せます。サポートされていないデータベース・オブジェクトが除外されていない場合、取得エラーが発生します。

この項の例では、PRE_INSTANTIATION_SETUPおよびPOST_INSTANTIATION_SETUPプロシージャを使用してデータベース・レプリケーションを構成します。レプリケーション構成では、Oracle Streamsによってサポートされていないすべてのデータベースが除外されます。ソース・データベースはstm1.net、接続先データベースはstm2.netです。

構成について次の決定を行っていると想定します。

  • DDL変更をメンテナンスします。

  • ソース・データベースに対してローカル取得を構成します。

  • レプリケーション環境は両方向です。

  • Recovery Managerによるデータベースのインスタンス化を実行します。

  • プロシージャでレプリケーション環境を直接構成します。構成スクリプトは生成されません。


注意:

取得プロセスでは、SYSSYSTEMまたはCTXSYSスキーマ内の変更は取得されません。これらのスキーマに対する変更は、この項で説明するレプリケーション環境でOracle Streamsによってメンテナンスされません。


参照:


次の手順を実行して、PRE_INSTANTIATION_SETUPおよびPOST_INSTANTIATION_SETUPプロシージャを使用して環境を構成します。

  1. PRE_INSTANTIATION_SETUPプロシージャを実行する前に必要なタスクを実行します。手順については、「Oracle Streamsレプリケーションを構成する前に実行するタスク」を参照してください。

    この構成について、次のタスクを実行する必要があります。

    • 両方のデータベースでOracle Streams管理者を構成します。

    • ソース・データベースstm1.netから接続先データベースstm2.netへのデータベース・リンクを作成します。

    • 両方のデータベースがARCHIVELOGモードであることを確認します。

    • 両方のデータベースの初期化パラメータが適切に設定されていることを確認します。

    接続先データベースからソース・データベースへのデータベース・リンクが必要です。ただし、データベースのインスタンス化にRecovery Managerが使用されるため、インスタンス化の後にこのデータベース・リンクを作成する必要があります。レプリケーション環境が両方向であり、データベースのインスタンス化にRecovery Managerが使用されるため、このデータベース・リンクが必要です。

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

    SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。

  3. PRE_INSTANTIATION_SETUPプロシージャを実行します。

    DECLARE
      empty_tbs  DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET;
    BEGIN
      DBMS_STREAMS_ADM.PRE_INSTANTIATION_SETUP(
        maintain_mode        => 'GLOBAL',
        tablespace_names     => empty_tbs,
        source_database      => 'stm1.net',
        destination_database => 'stm2.net',
        perform_actions      => TRUE,
        bi_directional       => TRUE,
        include_ddl          => TRUE,
        start_processes      => TRUE,
        exclude_schemas      => '*',
        exclude_flags        => DBMS_STREAMS_ADM.EXCLUDE_FLAGS_UNSUPPORTED +
                                DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DML +
                                DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DDL);
    END;
    /
    

    start_processesパラメータがTRUEに設定されていることに注意してください。したがって、構成中に作成される各取得プロセスおよび適用プロセスは、自動的に起動されます。

    また、exclude_schemasおよびexclude_flagsパラメータに指定されている値に注意してください。exclude_schemasに指定されているアスタリスク(*)は、データベース内の各スキーマの特定のデータベース・オブジェクトがレプリケーション環境から除外されることを示します。exclude_flagsパラメータに指定されている値は、サポートされていないすべてのデータベース・オブジェクトに対するDML変更およびDDL変更がレプリケーション環境から除外されることを示します。ルールは、これらのデータベース・オブジェクトを除外するために取得プロセスのネガティブ・ルール・セットに入れられます。

    プロシージャはソース・データベースで実行されるため、ソース・データベースでローカル取得が構成されます。

    このプロシージャでは両方向のレプリケーション環境が構成されるため、プロシージャの実行中に接続先データベースの共有データベース・オブジェクトに対するDML変更またはDDL変更を許可しないでください。

    プロシージャには、apply_nameパラメータを指定しません。したがって、このパラメータには、デフォルトでNULLが指定されます。apply_nameパラメータをNULLに設定すると、ソース・データベースからの変更を適用する適用プロセスは、接続先データベース上に存在することができません。ソース・データベースからの変更を適用する適用プロセスが接続先データベースに存在する場合、NULLでない値をapply_nameパラメータに指定します。

    このプロシージャでエラーが発生してプロシージャが停止した場合、エラーからのリカバリまたは構成操作のロールバックを実行する方法の詳細は、「構成エラーからのリカバリ」を参照してください。

  4. インスタンス化を実行します。第10章「インスタンス化の実行」で説明するいずれの方法でもインスタンス化を実行できます。この例では、次の手順を実行することによって、Recovery ManagerのDUPLICATEコマンドを使用してインスタンス化を実行します。

    1. ソース・データベースのバックアップを作成します(存在しない場合)。Recovery Managerには、複製用に有効なバックアップが必要です。この例では、stm1.netのバックアップを作成します(存在しない場合)。


      注意:

      Recovery ManagerのDUPLICATEコマンドを実行する際にFROM ACTIVE DATABASEオプションを使用する場合、ソース・データベースのバックアップは不要です。大規模なデータベースでは、FROM ACTIVE DATABASEオプションの実行に大量のネットワーク・リソースが必要になります。この例では、このオプションは使用しません。

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

      SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。

    3. Recovery ManagerのDUPLICATEコマンドに指定する終了SCNを判断します。

      SET SERVEROUTPUT ON SIZE 1000000
      DECLARE
        until_scn NUMBER;
      BEGIN
        until_scn:= DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER;
            DBMS_OUTPUT.PUT_LINE('Until SCN: ' || until_scn);
      END;
      /
      

      戻された終了SCNをメモします。この番号は手順hで使用します。この例では、戻された終了SCNが45442631であると想定します。

    4. SQL*Plusで、管理ユーザーとしてソース・データベースstm1.netに接続します。

    5. 現行のオンラインREDOログをアーカイブします。

      ALTER SYSTEM ARCHIVE LOG CURRENT;
      
    6. データベース複製のために環境を準備します。これには、接続先データベースを複製の補助インスタンスとして準備することも含まれます。手順については、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

    7. Recovery Managerクライアントを起動し、TARGETとしてソース・データベースstm1.netに、AUXILIARYとして接続先データベースstm2.netに接続します。


      参照:

      Recovery ManagerのCONNECTコマンドの詳細は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。

    8. OPEN RESTRICTEDオプションを指定してRecovery ManagerのDUPLICATEコマンドを実行し、接続先データベースでソース・データベースをインスタンス化します。OPEN RESTRICTEDオプションは必須です。このオプションを指定すると、SQL文ALTER SYSTEM ENABLE RESTRICTED SESSIONを発行することによって、複製データベースで制限付きセッションを有効にできます。Recovery Managerは、複製データベースがオープンされる直前にこの文を発行します。

      UNTIL SCN句を使用して、複製用のSCNを指定できます。この句には、手順cで判断した終了SCNを使用します。アーカイブREDOログは、指定した終了SCN値以上で使用可能である必要があります。したがって、手順eでは、終了SCNを含むREDOログをアーカイブしています。

      DUPLICATEコマンドのTO database_name に、複製データベースの名前を指定していることを確認してください。この例では、複製データベースはstm2.netです。したがって、この例のDUPLICATEコマンドにはTO stm2.netが含まれます。

      次に、Recovery ManagerのDUPLICATEコマンドの例を示します。

      RMAN> RUN
            {
              SET UNTIL SCN 45442631;
              ALLOCATE AUXILIARY CHANNEL stm2 DEVICE TYPE sbt;
              DUPLICATE TARGET DATABASE TO stm2
              NOFILENAMECHECK
              OPEN RESTRICTED;
            }
      

      参照:

      Recovery ManagerのDUPLICATEコマンドの詳細は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。

    9. SQL*Plusで、管理ユーザーとして接続先データベースに接続します。

    10. グローバル名を変更します。Recovery Managerによるデータベースのインスタンス化を実行すると、接続先データベースはソース・データベースと同じグローバル名を持ちます。次の文を使用して、接続先データベースのグローバル名を元の名前に戻します。

      ALTER DATABASE RENAME GLOBAL_NAME TO stm2.net;
      
    11. SQL*Plusで、Oracle Streams管理者として接続先データベースstm2.netに接続します。

    12. ソース・データベースからクローニングされた、ソース・データベースから接続先データベースへのデータベース・リンクを削除します。

      DROP DATABASE LINK stm2.net;
      
  5. 接続先データベースにOracle Streams管理者として接続したままで、接続先データベースからソース・データベースにデータベース・リンクを作成します。

    CREATE DATABASE LINK stm1.net CONNECT TO strmadmin
      IDENTIFIED BY password USING 'stm1.net';
    

    このデータベース・リンクが必要な理由については、手順1を参照してください。

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

  7. POST_INSTANTIATION_SETUPプロシージャを実行します。

    DECLARE
      empty_tbs  DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET;
    BEGIN
      DBMS_STREAMS_ADM.POST_INSTANTIATION_SETUP(
        maintain_mode        => 'GLOBAL',
        tablespace_names     => empty_tbs,
        source_database      => 'stm1.net',
        destination_database => 'stm2.net',
        perform_actions      => TRUE,
        bi_directional       => TRUE,
        include_ddl          => TRUE,
        start_processes      => TRUE,
        instantiation_scn    => 45442630,
        exclude_schemas      => '*',
        exclude_flags        => DBMS_STREAMS_ADM.EXCLUDE_FLAGS_UNSUPPORTED +
                                DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DML +
                                DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DDL);
    END;
    /
    

    PRE_INSTANTIATION_SETUPおよびPOST_INSTANTIATION_SETUPプロシージャの両方に指定されたパラメータ値が一致する必要があります。ただし、perform_actionsscript_namescript_directory_objectおよびstart_processesは除きます。

    また、instantiation_scnパラメータが45442630に設定されていることに注意してください。Recovery ManagerのDUPLICATEコマンドを実行すると、UNTIL SCN句で指定したSCN値より1つ少ない値まで、データベースが複製されます。したがって、手順4hDUPLICATEコマンドを実行した際に指定した終了SCN値から1を引く必要があります。この例では、終了SCNを45442631に設定しています。したがって、instantiation_scnパラメータは45442631 - 1の45442630に設定する必要があります。

    インスタンス化中に接続先データベースの共有データベース・オブジェクトにインスタンス化SCNが設定されている場合、instantiation_scnパラメータをNULLに設定する必要があります。たとえば、全データベースのエクスポート/インポート中にインスタンス化SCNが設定される場合があります。

    このプロシージャでは両方向のレプリケーション環境が構成されるため、プロシージャの実行中に接続先データベースの共有データベース・オブジェクトに対するDML変更またはDDL変更を許可しないでください。

    このプロシージャでエラーが発生してプロシージャが停止した場合、エラーからのリカバリまたは構成操作のロールバックを実行する方法の詳細は、「構成エラーからのリカバリ」を参照してください。

  8. SQL*Plusで接続先データベースに管理ユーザーとして接続し、ALTER SYSTEM文を実行してRESTRICTED SESSIONを無効化します。

    ALTER SYSTEM DISABLE RESTRICTED SESSION;
    
  9. 必要に応じて、共有データベース・オブジェクトの競合解消を構成します。

    通常、両方向のレプリケーション環境では、競合が発生する可能性があります。PRE_INSTANTIATION_SETUPおよびPOST_INSTANTIATION_SETUPプロシージャによって作成された環境で競合が発生する可能性がある場合は、共有データベース・オブジェクトに対する変更をユーザーに許可する前に競合解消を構成します。

この例で構成された両方向のレプリケーション環境には、次の特性があります。

  • 両方のデータベースでデータベース・サプリメンタル・ロギングが構成されています。

  • stm1.netデータベースには、システム生成名を持つ2つのキューおよびキュー表があります。1つのキューはローカル取得プロセス用で、もう1つのキューは適用プロセス用です。

  • stm2.netデータベースには、システム生成名を持つ2つのキューおよびキュー表があります。1つのキューはローカル取得プロセス用で、もう1つのキューは適用プロセス用です。

  • stm1.netデータベースで、システム生成名を持つ取得プロセスが、Oracle Streamsによってサポートされているデータベース内のすべてのデータベース・オブジェクトに対するDML変更およびDDL変更を取得します。

  • stm2.netデータベースで、システム生成名を持つ取得プロセスが、Oracle Streamsによってサポートされているデータベース内のすべてのデータベース・オブジェクトに対するDML変更およびDDL変更を取得します。

  • stm1.netデータベースで実行されているシステム生成名を持つ伝播が、stm1.netデータベースのキューからstm2.netデータベースのキューに取得された変更を伝播します。

  • stm2.netデータベースで実行されているシステム生成名を持つ伝播が、stm2.netデータベースのキューからstm1.netデータベースのキューに取得された変更を伝播します。

  • stm1.netデータベースで、システム生成名を持つ適用プロセスが、キューから変更をデキューしてこれらの変更をデータベース・オブジェクトに適用します。

  • stm2.netデータベースで、システム生成名を持つ適用プロセスが、キューから変更をデキューしてこれらの変更をデータベース・オブジェクトに適用します。

  • タグを使用して、変更の循環が回避されます。具体的には、適用プロセスによって適用される変更のREDOレコードにタグが含まれるように、各適用プロセスで適用タグが使用されます。各適用プロセスは、レプリケーション環境で一意の適用タグを使用します。各伝播は、同じデータベースで実行されている適用プロセスのタグを持つ変更を廃棄します。

DBMS_STREAMS_ADMパッケージを使用した表領域レプリケーションの構成

DBMS_STREAMS_ADMパッケージの次のプロシージャを使用すると、表領域レプリケーションを構成できます。

  • MAINTAIN_SIMPLE_TTS

  • MAINTAIN_TTS

  • PRE_INSTANTIATION_SETUPおよびPOST_INSTANTIATION_SETUP

MAINTAIN_SIMPLE_TTSプロシージャを使用すると、単一の表領域にOracle Streamsレプリケーションを構成できます。また、MAINTAIN_TTSプロシージャを使用すると、自己完結型の表領域セットにOracle Streamsレプリケーションを構成できます。これらのプロシージャでは、トランスポータブル表領域、データ・ポンプ、DBMS_STREAMS_TABLESPACE_ADMパッケージおよびDBMS_FILE_TRANSFERパッケージを使用して、環境が構成されます。

自己完結型の表領域には、その表領域の外部を指す表領域からの参照は含まれません。たとえば、表領域の索引が異なる表領域の表に対する索引である場合、その表領域は自己完結型ではありません。 単一の表領域は、データ・ファイルを1つのみ使用する自己完結型の表領域です。表領域セットに複数の表領域が存在する場合、自己完結型の表領域セットには、その表領域セットの外部を指す表領域セット内からの参照は含まれません。

この項のプロシージャでは、構成する表領域が、ソース・データベースから接続先データベースへのレプリケーションにクローニングされます。MAINTAIN_SIMPLE_TTSプロシージャでは、DBMS_STREAMS_TABLESPACE_ADMパッケージのCLONE_SIMPLE_TABLESPACEプロシージャが使用されます。MAINTAIN_TTSプロシージャでは、DBMS_STREAMS_TABLESPACE_ADMパッケージのCLONE_TABLESPACESプロシージャが使用されます。表領域がクローニングされると、この表領域はクローン操作が完了するまで自動的に読取り専用になります。

この項の例では、MAINTAIN_TTSプロシージャを使用して、Oracle Streamsを使用して次の表領域をメンテナンスするOracle Streamsレプリケーション環境を構成します。

  • tbs1

  • tbs2

ソース・データベースはstm1.net、接続先データベースはstm2.netです。

構成について次の決定を行っていると想定します。

  • これらの表領域およびこれらの表領域内のデータベース・オブジェクトに対するDDL変更がメンテナンスされます。

  • 接続先データベース(stm2.net)で実行されているダウンストリーム取得プロセスは、ソース・データベース(stm1.net)に対する変更を取得します。

  • レプリケーション環境は両方向です。

  • MAINTAIN_TTSプロシージャでレプリケーション環境を直接構成します。構成スクリプトは生成されません。


参照:

これらの決定の詳細は、「Oracle Streamsレプリケーションを構成する前に行う決定」を参照してください。

また、この例では、次のことを想定しています。

  • 表領域tbs1およびtbs2が、ソース・データベースstm1.netに自己完結型の表領域セットを構成しています。

  • 表領域セットのデータ・ファイルは、いずれもソース・データベースstm1.net/orc/dbsディレクトリに存在します。

  • stm2.netデータベースには現在、表領域セットは含まれていません。

MAINTAIN_SIMPLE_TTSおよびMAINTAIN_TTSプロシージャでは、各取得プロセスおよび適用プロセスのネガティブ・ルール・セットにルールを追加することによって、Oracle Streamsによってサポートされていないデータベース・オブジェクトがレプリケーション環境から自動的に除外されます。PRE_INSTANTIATION_SETUPおよびPOST_INSTANTIATION_SETUPプロシージャを使用すると、レプリケーション環境から除外するデータベース・オブジェクトを指定できます。

Oracle Streamsによってサポートされていないデータベース・オブジェクトを判別するには、DBA_STREAMS_UNSUPPORTEDデータ・ディクショナリ・ビューを問い合せます。サポートされていないデータベース・オブジェクトが除外されていない場合、取得エラーが発生します。


参照:

Oracle Streamsによってサポートされていないデータベース・オブジェクトを判別する手順については、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

MAINTAIN_TTSプロシージャを使用して環境を構成するには、次の手順を実行します。

  1. MAINTAIN_TTSプロシージャを実行する前に必要なタスクを実行します。手順については、「Oracle Streamsレプリケーションを構成する前に実行するタスク」を参照してください。

    この構成について、次のタスクを実行する必要があります。

    • 両方のデータベースでOracle Streams管理者を構成します。

    • ソース・データベースstm1.netから接続先データベースstm2.netへのデータベース・リンクを作成します。

    • レプリケーション環境が両方向であり、接続先データベースでダウンストリーム取得が構成されているため、接続先データベースstm2.netからソース・データベースstm1.netへのデータベース・リンクを作成します。

    • 次に示す必要なディレクトリ・オブジェクトを作成します。

      • ソース・データベースのソース・ディレクトリ・オブジェクト。この例では、このディレクトリ・オブジェクトはSOURCE_DIRECTORYであると想定しています。

      • 接続先データベースの接続先ディレクトリ・オブジェクト。この例では、このディレクトリ・オブジェクトはDEST_DIRECTORYであると想定しています。

    • 両方のデータベースがARCHIVELOGモードであることを確認します。

    • 接続先データベースをソース・データベースに対する変更の取得データベースに使用するため、ソース・データベースstm1.netから接続先データベースstm2.netへのログ・ファイルのコピーを構成します。

    • 両方のデータベースの初期化パラメータが適切に設定されていることを確認します。

  2. SQL*Plusで、Oracle Streams管理者として表領域セットを含むデータベースに接続します。この例では、stm1.netデータベースに接続します。

    SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。

  3. 表領域セットの表領域のデータ・ファイルを含むディレクトリのディレクトリ・オブジェクトを作成します。たとえば、次の文を実行すると、/orc/dbsディレクトリに対応するディレクトリ・オブジェクトtbs_directoryが作成されます。

    CREATE DIRECTORY tbs_directory AS '/orc/dbs';
    

    データ・ファイルが複数のディレクトリに存在する場合、ディレクトリ・オブジェクトはそれらのディレクトリごとに存在する必要があります。また、手順5MAINTAIN_TTSプロシージャを実行するユーザーが、それらのディレクトリ・オブジェクトに対するREAD権限を持っている必要があります。この例では、Oracle Streams管理者がディレクトリ・オブジェクトを作成するため、この権限を持っていることになります。

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

  5. MAINTAIN_TTSプロシージャを実行します。

    DECLARE
      t_names  DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET;
    BEGIN
      -- Tablespace names
      t_names(1) := 'TBS1';
      t_names(2) := 'TBS2';
      DBMS_STREAMS_ADM.MAINTAIN_TTS(
         tablespace_names             => t_names,
         source_directory_object      => 'SOURCE_DIRECTORY',
         destination_directory_object => 'DEST_DIRECTORY',
         source_database              => 'stm1.net',
         destination_database         => 'stm2.net',
         perform_actions              => TRUE,
         bi_directional               => TRUE,
         include_ddl                  => TRUE);
    END;
    /
    

    このプロシージャが完了すると、両方向のOracle Streamsレプリケーション環境が構成されます。このプロシージャでは、作成するANYDATAキュー、取得プロセス、伝播および適用プロセスの名前が自動的に生成されます。これらのコンポーネントにシステム生成名を使用しない場合、MAINTAIN_TTSプロシージャに使用可能な追加のパラメータを使用して名前を指定できます。また、このプロシージャによって、キュー、取得プロセス、伝播および適用プロセスが起動されます。

    このプロシージャは接続先データベースで実行されるため、接続先データベースで、ソース・データベースに対する変更のダウンストリーム取得が構成されます。

    プロシージャには、apply_nameパラメータを指定しません。したがって、このパラメータには、デフォルトでNULLが指定されます。apply_nameパラメータをNULLに設定すると、ソース・データベースからの変更を適用する適用プロセスは、接続先データベース上に存在することができません。ソース・データベースからの変更を適用する適用プロセスが接続先データベースに存在する場合、NULLでない値をapply_nameパラメータに指定します。

    このプロシージャでエラーが発生してプロシージャが停止した場合、エラーからのリカバリまたは構成操作のロールバックを実行する方法の詳細は、「構成エラーからのリカバリ」を参照してください。

  6. 必要に応じて、表領域セットのデータベース・オブジェクトの競合解消を構成します。

    通常、両方向のレプリケーション環境では、競合が発生する可能性があります。MAINTAIN_TTSプロシージャで作成した環境で競合が発生する可能性がある場合は、競合解消を構成してから、表領域セットのオブジェクトに対する変更をユーザーに許可します。

構成された両方向のレプリケーション環境には、次の特性があります。

  • 両方のデータベースで共有データベース・オブジェクトのサプリメンタル・ロギングが構成されています。

  • stm1.netデータベースには、システム生成名を持つキューおよびキュー表があります。このキューは適用プロセス用です。

  • stm2.netデータベースには、システム生成名を持つ3つのキューおよびキュー表があります。1つのキューはダウンストリーム取得プロセス用、1つのキューはローカル取得プロセス用、もう1つのキューは適用プロセス用です。

  • stm2.netデータベースで、システム生成名を持つダウンストリーム取得プロセスが、ソース・データベースに対するDML変更およびDDL変更を取得します。具体的には、このダウンストリーム取得プロセスは、tbs1およびtbs2表領域内の表に対するDML変更、およびこれらの表領域およびそのデータベース・オブジェクトに対するDDL変更を取得します。

  • stm2.netデータベースで、システム生成名を持つローカル取得プロセスが、接続先データベースに対するDML変更およびDDL変更を取得します。具体的には、このローカル取得プロセスは、tbs1およびtbs2表領域の表に対するDML変更、およびこれらの表領域およびそのデータベース・オブジェクトに対するDDL変更を取得します。

  • システム生成名を持つstm2.netデータベースで実行されている伝播が、ダウンストリーム取得プロセス用のキューからstm2.netデータベース内の適用プロセス用のキューに、ダウンストリーム取得プロセスによって取得された変更を伝播します。

  • システム生成名を持つstm2.netデータベースで実行されている伝播が、ローカル取得プロセス用のキューからstm1.netデータベースのキューに、ローカル取得プロセスによって取得された変更を伝播します。

  • stm1.netデータベースで、システム生成名を持つ適用プロセスが、キューから変更をデキューしてこれらの変更を共有データベース・オブジェクトに適用します。

  • stm2.netデータベースで、システム生成名を持つ適用プロセスが、キューから変更をデキューしてこれらの変更を共有データベース・オブジェクトに適用します。

  • タグを使用して、変更の循環が回避されます。具体的には、適用プロセスによって適用される変更のREDOレコードにタグが含まれるように、各適用プロセスで適用タグが使用されます。各適用プロセスは、レプリケーション環境で一意の適用タグを使用します。各伝播は、同じデータベースで実行されている適用プロセスのタグを持つ変更を廃棄します。

DBMS_STREAMS_ADMパッケージを使用したスキーマ・レプリケーションの構成

DBMS_STREAMS_ADMパッケージのMAINTAIN_SCHEMASを使用すると、スキーマ・レプリケーションを構成できます。この項の例では、このプロシージャを使用して、hrスキーマをメンテナンスするOracle Streamsレプリケーション環境を構成します。ソース・データベースはstm1.net、接続先データベースはstm2.netです。

構成について次の決定を行っていると想定します。

  • hrスキーマおよびhrスキーマ内のデータベース・オブジェクトに対するDDL変更がメンテナンスされます。

  • レプリケーション環境は両方向です。

  • 第3のデータベースstm3.netで実行されているダウンストリーム取得プロセスがソース・データベース(stm1.net)に対する変更を取得し、stm3.netの伝播が取得されたこれらの変更を接続先データベース(stm2.net)に伝播します。

  • データ・ポンプ・エクスポート・ダンプ・ファイルによるインスタンス化が実行されます。

  • MAINTAIN_SCHEMASプロシージャでレプリケーション環境を直接構成します。構成スクリプトは生成されません。

MAINTAIN_SCHEMASプロシージャでは、各取得プロセスおよび適用プロセスのネガティブ・ルール・セットにルールを追加することによって、Oracle Streamsによってサポートされていないデータベース・オブジェクトがレプリケーション環境から自動的に除外されます。Oracle Streamsによってサポートされていないデータベース・オブジェクトを判別するには、DBA_STREAMS_UNSUPPORTEDデータ・ディクショナリ・ビューを問い合せます。サポートされていないデータベース・オブジェクトが除外されていない場合、取得エラーが発生します。


参照:


MAINTAIN_SCHEMASプロシージャを使用して環境を構成するには、次の手順を実行します。

  1. MAINTAIN_SCHEMASプロシージャを実行する前に必要なタスクを実行します。手順については、「Oracle Streamsレプリケーションを構成する前に実行するタスク」を参照してください。

    この構成について、次のタスクを実行する必要があります。

    • 3つすべてのデータベースでOracle Streams管理者を構成します。

    • ソース・データベースstm1.netから接続先データベースstm2.netへのデータベース・リンクを作成します。

    • ダウンストリーム取得が第3のデータベースで構成されるため、第3のデータベースstm3.netからソース・データベースstm1.netへのデータベース・リンクを作成します。

    • ダウンストリーム取得が第3のデータベースで構成されるため、第3のデータベースstm3.netから接続先データベースstm2.netへのデータベース・リンクを作成します。

    • レプリケーション環境は両方向になるため、接続先データベースstm2.netからソース・データベースstm1.netへのデータベース・リンクを作成します。

    • 次に示す必要なディレクトリ・オブジェクトを作成します。

      • ソース・データベースのソース・ディレクトリ・オブジェクト。この例では、このディレクトリ・オブジェクトはSOURCE_DIRECTORYであると想定しています。

      • 接続先データベースの接続先ディレクトリ・オブジェクト。この例では、このディレクトリ・オブジェクトはDEST_DIRECTORYであると想定しています。

    • ソース・データベースおよび接続先データベースがARCHIVELOGモードであることを確認します。

    • 第3のデータベース(stm3.net)をソース・データベースに対する変更の取得データベースに使用するため、ソース・データベースstm1.netから第3のデータベースstm3.netへのログ・ファイルのコピーを構成します。アーカイブ・ログ・ダウンストリームの取得プロセスのためのログ・ファイルのコピーの構成

    • すべてのデータベースの初期化パラメータが適切に設定されていることを確認します。

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

    SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。

  3. MAINTAIN_SCHEMASプロシージャを実行します。

    BEGIN
      DBMS_STREAMS_ADM.MAINTAIN_SCHEMAS(
        schema_names                 => 'hr',
        source_directory_object      => 'SOURCE_DIRECTORY',
        destination_directory_object => 'DEST_DIRECTORY',
        source_database              => 'stm1.net',
        destination_database         => 'stm2.net',
        perform_actions              => TRUE,
        dump_file_name               => 'export_hr.dmp',
        capture_queue_table          => 'rep_capture_queue_table',
        capture_queue_name           => 'rep_capture_queue',
        capture_queue_user           => NULL,
        apply_queue_table            => 'rep_dest_queue_table',
        apply_queue_name             => 'rep_dest_queue',
        apply_queue_user             => NULL,
        capture_name                 => 'capture_hr',
        propagation_name             => 'prop_hr',
        apply_name                   => 'apply_hr',
        log_file                     => 'export_hr.clg',
        bi_directional               => TRUE,
        include_ddl                  => TRUE,
        instantiation                => DBMS_STREAMS_ADM.INSTANTIATION_SCHEMA);
    END;
    /
    

    このプロシージャでは両方向のレプリケーション環境が構成されるため、プロシージャの実行中に接続先データベースの共有データベース・オブジェクトに対するDML変更またはDDL変更を許可しないでください。

    このプロシージャは第3のデータベースで実行されるため、第3のデータベースで、ソース・データベースに対する変更のダウンストリーム取得が構成されます。

    このプロシージャでエラーが発生してプロシージャが停止した場合、エラーからのリカバリまたは構成操作のロールバックを実行する方法の詳細は、「構成エラーからのリカバリ」を参照してください。

  4. 必要に応じて、共有データベース・オブジェクトの競合解消を構成します。

    通常、両方向のレプリケーション環境では、競合が発生する可能性があります。MAINTAIN_SCHEMASプロシージャで作成した環境で競合が発生する可能性がある場合は、競合解消を構成してから、共有データベース・オブジェクトに対する変更をユーザーに許可します。

この例で構成された両方向のレプリケーション環境には、次の特性があります。

  • ソース・データベースおよび接続先データベースで共有データベース・オブジェクトのサプリメンタル・ロギングが構成されています。

  • stm1.netデータベースには、キュー表rep_dest_queue_tableを使用するキューrep_dest_queueがあります。このキューは適用プロセス用です。

  • stm2.netデータベースには、キュー表rep_capture_queue_tableを使用するキューrep_capture_queueがあります。このキューはローカル取得プロセス用です。

  • stm2.netデータベースには、キュー表rep_dest_queue_tableを使用するキューrep_dest_queueがあります。このキューは適用プロセス用です。

  • stm3.netデータベースには、キュー表rep_capture_queue_tableを使用するキューrep_capture_queueがあります。このキューはダウンストリーム取得プロセス用です。

  • stm3.netデータベースで、アーカイブ・ログ・ダウンストリームの取得プロセスcapture_hrが、hrスキーマおよびソース・データベースのスキーマ内のデータベース・オブジェクトに対するDML変更およびDDL変更を取得します。

  • stm2.netデータベースで、ローカル取得プロセスcapture_hrが、hrスキーマおよび接続先データベースのスキーマ内のデータベース・オブジェクトに対するDML変更およびDDL変更を取得します。

  • stm3.netデータベースで実行されている伝播prop_hrが、stm3.netデータベースのキューからstm2.netデータベースのキューに取得された変更を伝播します。

  • stm2.netデータベースで実行されている伝播prop_hrが、stm2.netデータベースのキューからstm1.netデータベースのキューに取得された変更を伝播します。

  • stm1.netデータベースで、適用プロセスapply_hrが、rep_dest_queueから変更をデキューしてこれらの変更をデータベース・オブジェクトに適用します。

  • stm2.netデータベースで、適用プロセスapply_hrが、rep_dest_queueから変更をデキューしてこれらの変更をデータベース・オブジェクトに適用します。

  • タグを使用して、変更の循環が回避されます。具体的には、適用プロセスによって適用される変更のREDOレコードにタグが含まれるように、各適用プロセスで適用タグが使用されます。各適用プロセスは、レプリケーション環境で一意の適用タグを使用します。各伝播は、同じデータベースで実行されている適用プロセスのタグを持つ変更を廃棄します。

DBMS_STREAMS_ADMパッケージを使用した表レプリケーションの構成

DBMS_STREAMS_ADMパッケージのMAINTAIN_TABLESを使用すると、表レプリケーションを構成できます。この項の例では、このプロシージャを使用して、hrスキーマ内の表をメンテナンスするOracle Streamsレプリケーション環境を構成します。ソース・データベースはstm1.net、接続先データベースはstm2.netです。

構成について次の決定を行っていると想定します。

  • レプリケーション環境で、hrスキーマ内の次の表に対するDDL変更がメンテナンスされるようにする必要があります。

    • departments

    • employees

  • レプリケーション環境で、hrスキーマ内の次の表に対するDDL変更がメンテナンスされないようにする必要があります。

    • countries

    • regions

    • locations

    • jobs

    • job_history

  • ソース・データベースに対してローカル取得を構成します。

  • レプリケーション環境は単一ソースで、両方向ではありません。

  • データ・ポンプ・ネットワーク・インポートによるインスタンス化が実行されます。

  • MAINTAIN_TABLESプロシージャでレプリケーション環境を直接構成しません。かわりに、構成スクリプトを生成し、departmentsおよびemployees表に対するDDL変更がメンテナンスされるようにこのスクリプトを変更します。

Oracle Streamsによってサポートされていない表は、レプリケートしないようにしてください。


参照:


MAINTAIN_TABLESプロシージャを使用して環境を構成するには、次の手順を実行します。

  1. MAINTAIN_TABLESプロシージャを実行する前に必要なタスクを実行します。手順については、「Oracle Streamsレプリケーションを構成する前に実行するタスク」を参照してください。

    この構成について、次のタスクを実行する必要があります。

    • 両方のデータベースでOracle Streams管理者を構成します。

    • ソース・データベースstm1.netから接続先データベースstm2.netへのデータベース・リンクを作成します。

    • MAINTAIN_TABLESプロシージャではデータ・ポンプ・ネットワーク・インポートによるインスタンス化が実行されるため、接続先データベースstm2.netからソース・データベースstm1.netへのデータベース・リンクを作成します。

    • ソース・データベースでスクリプト・ディレクトリ・オブジェクトを作成します。この例では、このディレクトリ・オブジェクトはSCRIPT_DIRECTORYであると想定しています。

    • ソース・データベースstm1.netARCHIVELOGモードであることを確認します。

    • 両方のデータベースの初期化パラメータが適切に設定されていることを確認します。

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

    SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。

  3. MAINTAIN_TABLESプロシージャを実行します。

    DECLARE
      tables DBMS_UTILITY.UNCL_ARRAY;
      BEGIN
        tables(1) := 'hr.departments';
        tables(2) := 'hr.employees';
        tables(3) := 'hr.countries';
        tables(4) := 'hr.regions';
        tables(5) := 'hr.locations';
        tables(6) := 'hr.jobs';
        tables(7) := 'hr.job_history';
        DBMS_STREAMS_ADM.MAINTAIN_TABLES(
          table_names                  => tables,
          source_directory_object      => NULL,
          destination_directory_object => NULL,
          source_database              => 'stm1.net',
          destination_database         => 'stm2.net',
          perform_actions              => FALSE,
          script_name                  => 'configure_rep.sql',
          script_directory_object      => 'SCRIPT_DIRECTORY',
          bi_directional               => FALSE,
          include_ddl                  => FALSE,
          instantiation      => DBMS_STREAMS_ADM.INSTANTIATION_TABLE_NETWORK);
    END;
    /
    

    プロシージャによって生成されたconfigure_rep.sqlスクリプトでは、プロシージャのコールで指定されていないパラメータにデフォルト値が使用されます。スクリプトでは、作成するANYDATAキュー、キュー表、取得プロセス、伝播および適用プロセスにシステム生成名が使用されます。MAINTAIN_TABLESプロシージャに使用可能な追加のパラメータを使用して、異なる名前を指定することもできます。include_ddlパラメータがFALSEに設定されていることに注意してください。したがって、このスクリプトでは、表に対するDDL変更をメンテナンスするようにレプリケーション環境が構成されません。

    プロシージャには、apply_nameパラメータを指定しません。したがって、このパラメータには、デフォルトでNULLが指定されます。apply_nameパラメータをNULLに設定すると、ソース・データベースからの変更を適用する適用プロセスは、接続先データベース上に存在することができません。ソース・データベースからの変更を適用する適用プロセスが接続先データベースに存在する場合、NULLでない値をapply_nameパラメータに指定します。

  4. configure_rep.sqlスクリプトを変更します。

    1. ソース・データベースが実行されているコンピュータ・システムのSCRIPT_DIRECTORYディレクトリ・オブジェクトに対応するディレクトリにナビゲートします。

    2. テキスト・エディタでconfigure_rep.sqlスクリプトをオープンします。このスクリプトを変更する前に、このスクリプトをバックアップすることを検討してください。

    3. スクリプトで、hr.departmentsおよびhr.employees表のルールを作成するADD_TABLE_RULESおよびADD_TABLE_PROPAGATION_RULESプロシージャのコールを検索します。たとえば、取得プロセスのプロシージャ・コールは次のようになります。

      dbms_streams_adm.add_table_rules(
          table_name => '"HR"."DEPARTMENTS"',
          streams_type => 'CAPTURE',
          streams_name => '"STM1$CAP"',
          queue_name => '"STRMADMIN"."STM1$CAPQ"',
          include_dml => TRUE,
          include_ddl => FALSE,
          include_tagged_lcr => TRUE,
          source_database => 'STM1.NET',
          inclusion_rule => TRUE,
          and_condition => get_compatible);
      
      dbms_streams_adm.add_table_rules(
          table_name => '"HR"."EMPLOYEES"',
          streams_type => 'CAPTURE',
          streams_name => '"STM1$CAP"',
          queue_name => '"STRMADMIN"."STM1$CAPQ"',
          include_dml => TRUE,
          include_ddl => FALSE,
          include_tagged_lcr => TRUE,
          source_database => 'STM1.NET',
          inclusion_rule => TRUE,
          and_condition => get_compatible);
      
    4. 手順cで検索したプロシージャ・コールで、include_ddlパラメータの設定をTRUEに変更します。たとえば、変更後の取得プロセスのプロシージャ・コールは次のようになります。

      dbms_streams_adm.add_table_rules(
          table_name => '"HR"."DEPARTMENTS"',
          streams_type => 'CAPTURE',
          streams_name => '"STM1$CAP"',
          queue_name => '"STRMADMIN"."STM1$CAPQ"',
          include_dml => TRUE,
          include_ddl => TRUE,
          include_tagged_lcr => TRUE,
          source_database => 'STM1.NET',
          inclusion_rule => TRUE,
          and_condition => get_compatible);
      
      dbms_streams_adm.add_table_rules(
          table_name => '"HR"."EMPLOYEES"',
          streams_type => 'CAPTURE',
          streams_name => '"STM1$CAP"',
          queue_name => '"STRMADMIN"."STM1$CAPQ"',
          include_dml => TRUE,
          include_ddl => TRUE,
          include_tagged_lcr => TRUE,
          source_database => 'STM1.NET',
          inclusion_rule => TRUE,
          and_condition => get_compatible);
      

      すべての取得プロセス、伝播および適用プロセスのプロシージャ・コールを変更する必要があります。

    5. configure_rep.sqlスクリプトを保存してクローズします。

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

  6. ソース・データベースにOracle Streams管理者として接続し、構成スクリプトを実行します。

    SET ECHO ON
    SPOOL configure_rep.out
    @configure_rep.sql
    

    スクリプトを実行すると、データベース名およびOracle Streams管理者に関する情報を入力するように求められます。この構成スクリプトが完了すると、単一ソースのOracle Streamsレプリケーション環境が構成されます。また、このスクリプトによって、キュー、取得プロセス、伝播および適用プロセスが起動されます。

構成された単一ソース・レプリケーション環境には、次の特性があります。

  • ソース・データベースで、共有データベース・オブジェクトのサプリメンタル・ロギングが構成されています。

  • ソース・データベースstm1.netには、システム生成名を持つキューおよびキュー表があります。

  • 接続先データベースstm2.neには、システム生成名を持つキューおよびキュー表があります。

  • ソース・データベースで、システム生成名を持つ取得プロセスが、hrスキーマ内のすべての表に対するDML変更、およびhr.departmentsおよびhr.employees表に対するDDL変更を取得します。

  • ソース・データベースで実行されているシステム生成名を持つ伝播が、ソース・データベースのキューから接続先データベースのキューに取得された変更を伝播します。

  • 接続先データベースで、システム生成名を持つ適用プロセスが、キューから変更をデキューしてこれらの変更を接続先データベースの表に適用します。