4 Oracle Streamsレプリケーション環境への追加
この章では、既存のOracle Streamsレプリケーション環境にデータベース・オブジェクトおよびデータベースを追加する方法について説明します。
この章には次のトピックが含まれます:
注意:
特定のタイプのデータベース・オブジェクトは、Oracle Streamsではサポートされません。Oracle Streams環境を拡張する場合、取得プロセスが、サポートされていないデータベース・オブジェクトに対する変更の取得を試行しないことを確認します。また、同期取得または適用プロセスが、サポートされていない列に対する変更の処理を試行しないことも確認します。サポートされていないデータベース・オブジェクトおよび列を表示するには、DBA_STREAMS_UNSUPPORTED
およびDBA_STREAMS_COLUMNS
データ・ディクショナリ・ビューを問い合せます。
関連項目:
-
Oracle Streamsによってサポートされていないデータベース・オブジェクトを判別する手順については、『Oracle Streams概要および管理』を参照してください。
4.1 Oracle Streamsレプリケーション環境への追加について
組織でのニーズが変化すると、Oracle Streamsレプリケーション環境の拡張が必要な場合があります。Oracle Streamsレプリケーション環境は、データベース・オブジェクトまたはデータベースを追加することによって拡張できます。
Oracle Streamsレプリケーション環境の拡張には次の3つの方法があります。
4.1.1 Streamsレプリケーションの設定ウィザードまたは単一の構成プロシージャの使用について
Oracle Streamsレプリケーション環境を簡単に拡張するには次の2つの方法があります。
-
Oracle Enterprise Manager Cloud ControlのStreamsレプリケーションの設定ウィザードを実行
-
DBMS_STREAMS_ADM
パッケージにある次のいずれかのプロシージャを実行-
MAINTAIN_GLOBAL
プロシージャ: データベース内のすべてのデータベース・オブジェクトに対する変更をレプリケートする環境に新規データベースを追加できます。 -
MAINTAIN_SCHEMAS
プロシージャ: レプリケーション環境の既存データベースに1つ以上の新規スキーマを追加するか、または現在レプリケートされているスキーマをレプリケートする新規データベースを追加できます。 -
MAINTAIN_SIMPLE_TTS
プロシージャ: 既存のレプリケーション環境に新しい単一の表領域を追加するか、または現在レプリケートされている単一の表領域をレプリケートする新規データベースを追加できます。 -
MAINTAIN_TABLES
プロシージャ: レプリケーション環境の既存データベースに1つ以上の新しい表を追加するか、現在レプリケートされている表をレプリケートする新規データベースを追加できます。 -
MAINTAIN_TTS
プロシージャ: 既存のレプリケーション環境に新しい表領域セットを追加するか、または現在レプリケートされている表領域セットをレプリケートする新規データベースを追加できます。
-
これらの方法のいずれかを使用してOracle Streamsレプリケーション環境を拡張するには、環境が次の条件を満たしている必要があります。
-
Streamsレプリケーションの設定ウィザードまたは
DBMS_STREAMS_ADM
パッケージのいずれかの構成プロシージャで構成された、2データベース・レプリケーション環境またはハブ・アンド・スポーク・レプリケーション環境である必要があります。これらのタイプのレプリケーション環境については、「どのタイプのレプリケーション環境を構成するかの決定」を参照してください。 -
Oracle Streamsレプリケーション環境のデータベースでは同期取得を使用できません。同期取得の詳細は、『Oracle Streams概要および管理』を参照してください。
-
環境にデータベースを追加する場合、変更を取得する各データベースはローカル取得プロセスを使用する必要があります。どのデータベースでもダウンストリーム取得プロセスは使用できません。環境に1つ以上のデータベース・オブジェクトを追加する場合は、データベースでローカルかダウンストリームのいずれかの取得プロセスを使用できます。ダウンストリーム取得の詳細は、「ソース・データベースに対してローカル取得またはダウンストリーム取得を構成するかどうかの決定」を参照してください。
-
レプリケーション環境にデータベース・オブジェクトを追加する場合、そのデータベース・オブジェクトは、構成プロシージャの
source_database
パラメータで指定されたデータベースに存在する必要があります。
環境がこれらの条件を満たしている場合は、Streamsレプリケーションの設定ウィザードまたは単一のプロシージャを使用して環境を拡張できます。
次は、ウィザードまたはプロシージャを実行する前に、レプリケートされたデータベース・オブジェクトが対象とする宛先データベースにすでに存在する場合の追加要件です。
-
レプリケーション環境にデータベース・オブジェクトを追加する場合に、1つ以上のデータベース・オブジェクトがソース・データベース以外のデータベースに存在するときは、次の要件を満たす必要があります。
-
ウィザードまたはプロシージャを実行する前に、各宛先データベースのレプリケートされたデータベース・オブジェクトに、ソース・データベースのレプリケートされたデータベース・オブジェクトとの一貫性があることを確認します。
-
ウィザードまたはプロシージャを実行した後、各宛先データベースのレプリケートされたデータベース・オブジェクトそれぞれにインスタンス化SCNが設定されていることを確認します。「宛先データベースでのインスタンス化SCNの設定」および「インスタンス化の監視」を参照してください。
-
-
レプリケーション環境にデータベースを追加する場合に、追加されるデータベースに現在の環境でレプリケーションされたデータベース・オブジェクトが存在するときは、次の要件を満たす必要があります。
-
ウィザードまたはプロシージャを実行する前に、追加される各データベースのレプリケートされたデータベース・オブジェクトに、ソース・データベースのレプリケートされたデータベース・オブジェクトとの一貫性があることを確認します。
-
ウィザードまたはプロシージャを実行した後、追加されたデータベースのレプリケートされたデータベース・オブジェクトそれぞれにインスタンス化SCNが設定されていることを確認します。「宛先データベースでのインスタンス化SCNの設定」および「インスタンス化の監視」を参照してください。
-
ウィザードまたは単一のプロシージャを使用してレプリケーション環境に追加する手順については、次のマニュアルを参照してください。
-
Streamsレプリケーションの設定ウィザードを使用する手順については、Oracle Enterprise Manager Cloud Controlのオンライン・ヘルプを参照してください。
-
DBMS_STREAMS_ADM
パッケージの単一のプロシージャを使用する手順については、「単一のプロシージャを使用した複数のコンポーネントの追加」を参照してください
関連項目:
DBMS_STREAMS_ADM
の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
4.1.2 複数の手順でのOracle Streamsコンポーネントの個別追加について
Streamsレプリケーションの設定ウィザード、またはDBMS_STREAMS_ADM
パッケージの構成プロシージャを使用してOracle Streamsレプリケーション環境を拡張できない場合は、構成手順を手動で完了する必要があります。この手順には、必要なルールとOracle Streamsコンポーネントを環境に追加するなどの構成手順が含まれます。
Oracle Streamsレプリケーション環境を手動で拡張する必要がある場合は、「複数の手順でのコンポーネントの個別追加」で説明されている手順を参照してください。
4.2 単一のプロシージャを使用した複数のコンポーネントの追加
この項では、DBMS_STREAMS_ADM
パッケージの単一のPL/SQLプロシージャを使用したOracle Streamsコンポーネントの追加について説明します。Oracle Streamsコンポーネントには、キュー、ルール、ルール・セット、取得プロセス、同期取得、伝播および適用プロセスが含まれます。
この項の内容は次のとおりです。
4.2.1 単一のプロシージャを使用したレプリケーション環境へのデータベース・オブジェクトの追加
このトピックには、DBMS_STREAMS_ADM
パッケージのMAINTAIN_TABLES
プロシージャを使用して、既存のハブ・アンド・スポーク・レプリケーション環境に表を追加する例が含まれます。この例を完了すると、Oracle Streamsレプリケーション環境によって、その環境のデータベースに追加された表に対する変更がレプリケートされます。
具体的には、このトピックの例では、「ハブ・アンド・スポーク・レプリケーションを構成する例」で構成したレプリケーション環境を拡張します。この構成には、次のような特徴があります。
-
hr
スキーマが、hub.example.com
、spoke1.example.com
、およびspoke2.example.com
の各データベースでレプリケートされます。 -
hub.example.com
データベースが、ハブ・アンド・スポーク環境におけるハブ・データベースであり、他のデータベースがスポーク・データベースです。 -
スポーク・データベースでは、レプリケートされたスキーマへの変更が可能で、各データベースはそのローカル取得プロセスでこれらの変更を取得します。
-
競合を解消するために、各データベースでレプリケートされた各表に、更新競合ハンドラが構成されます。
この例では、環境に次の表を追加します。
-
oe.orders
-
oe.order_items
この例ではoe
サンプル・スキーマにある表を使用します。
注意:
DBMS_STREAMS_ADM
パッケージの構成プロシージャを使用してOracle Streamsレプリケーション環境を拡張する前に、「Streamsレプリケーションの設定ウィザードまたは単一の構成プロシージャの使用について」で説明されている条件を環境が満たしていることを確認してください。
手順は次のとおりです。
-
次のディレクトリ・オブジェクトが存在することを確認し、これらのオブジェクトから前の構成に関連するファイル(データ・ポンプ・エクスポート・ダンプ・ファイルおよびエクスポート・ログ・ファイルを含む)をすべて削除します。
-
hub.example.com
データベースのhub_dir
ディレクトリ・オブジェクト。 -
spoke1.example.com
データベースのspoke1_dir
ディレクトリ・オブジェクト。 -
spoke2.example.com
データベースのspoke2_dir
ディレクトリ・オブジェクト。
-
-
ハブ・アンド・スポーク環境で、ハブ・データベースの取得プロセスを停止します。
取得プロセスを停止するには、
DBMS_CAPTURE_ADM
パッケージのSTOP_CAPTURE
プロシージャを使用します。この例では、
hub.example.com
データベースの取得プロセスを停止します。取得プロセスの停止中、レプリケートされたデータベース・オブジェクトは変更に対してオープンなままにしておくことができます。これらの変更は、取得プロセスが再開されたときに取得されます。 -
SQL*Plusでは、ハブ・データベースで
DBMS_STREAMS_ADM
パッケージの適切な構成プロシージャを実行し、各スポーク・データベースに新規の各データベース・オブジェクトを追加します。環境に複数のスポーク・データベースが存在する場合、このプロシージャを複数回実行しなければならない場合があります。この例では、次の手順を実行します。
-
SQL*Plusを開き、Oracle Streams管理者として
hub.example.com
データベースに接続します。SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。
-
hub.example.com
とspoke1.example.com
の間のレプリケーションを実行するために、MAINTAIN_TABLES
プロシージャを実行して、oe.orders
表およびoe.order_items
表を追加します。DECLARE tables DBMS_UTILITY.UNCL_ARRAY; BEGIN tables(1) := 'oe.orders'; tables(2) := 'oe.order_items'; DBMS_STREAMS_ADM.MAINTAIN_TABLES( table_names => tables, 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_TABLES
プロシージャは多くの構成タスクを実行するため、実行に時間がかかる場合があります。プロシージャの実行中に宛先データベースの指定した表に対するデータ操作言語(DML)またはデータ定義言語(DDL)変更を許可しないでください。プロシージャが完了すると、環境に新しいデータベース・オブジェクトが追加され、手順2で停止されていた取得プロセスが再開されます。構成プロシージャの実行時、そのプロシージャの進捗に関する情報は、データ・ディクショナリ・ビュー
DBA_RECOVERABLE_SCRIPT
、DBA_RECOVERABLE_SCRIPT_PARAMS
、DBA_RECOVERABLE_SCRIPT_BLOCKS
およびDBA_RECOVERABLE_SCRIPT_ERRORS
に記録されます。プロシージャでエラーが発生してプロシージャが停止した場合は、『Oracle Streamsレプリケーション管理者ガイド』でDBMS_STREAMS_ADM
パッケージのRECOVER_OPERATION
プロシージャを使用したこれらのエラーからのリカバリ手順を参照してください。Oracle Streamsコンポーネント名を指定するパラメータ値は、レプリケーション環境を構成した
DBMS_STREAMS_ADM
パッケージの構成プロシージャで指定されている値と同じである必要があります。指定されるOracle Streamsコンポーネント名には、取得プロセス名、キュー名、キュー表名、伝播名および適用プロセス名が含まれます。この例では、Oracle Streamsコンポーネント名は、「ハブ・アンド・スポーク・レプリケーションを構成する例」で指定されている名前と一致します。 -
hub.example.com
とspoke2.example.com
の間のレプリケーションを実行するために、MAINTAIN_TABLES
プロシージャを実行して、oe.orders
表およびoe.order_items
表を追加します。DECLARE tables DBMS_UTILITY.UNCL_ARRAY; BEGIN tables(1) := 'oe.orders'; tables(2) := 'oe.order_items'; DBMS_STREAMS_ADM.MAINTAIN_TABLES( table_names => tables, 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; /
-
-
スポーク・データベースでレプリケートされた表のインスタンス化SCNを設定します。
注意:
この例でこの手順が必要なのは、
MAINTAIN_TABLES
プロシージャの実行前に、レプリケートされた表がスポーク・データベースに存在していたためです。MAINTAIN_TABLES
プロシージャの実行前に、レプリケートされた表がスポーク・データベースに存在していなかった場合は、プロシージャによって、レプリケートされた表にインスタンス化SCNが設定されるため、この手順は必要ありません。インスタンス化SCNの設定時に共有表のデータがソース・データベースと宛先データベースで一貫していること、およびSCNがインスタンス化SCNに使用されるまでソース・データベースの表が変更されないことを確認します。-
SQL*Plusで、Oracle Streams管理者として
hub.example.com
データベースに接続します。SQL*Plusでデータベースに接続する方法については、『Oracle Database管理者ガイド』を参照してください。
-
spoke1.example.com
データベースでoe.orders
表のインスタンス化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@spoke1.example.com( source_object_name => 'oe.orders', source_database_name => 'hub.example.com', instantiation_scn => iscn); END; /
-
spoke1.example.com
データベースでoe.order_items
表のインスタンス化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@spoke1.example.com( source_object_name => 'oe.order_items', source_database_name => 'hub.example.com', instantiation_scn => iscn); END; /
-
spoke2.example.com
データベースでoe.orders
表のインスタンス化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@spoke2.example.com( source_object_name => 'oe.orders', source_database_name => 'hub.example.com', instantiation_scn => iscn); END; /
-
spoke2.example.com
データベースでoe.order_items
表のインスタンス化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@spoke2.example.com( source_object_name => 'oe.order_items', source_database_name => 'hub.example.com', instantiation_scn => iscn); END; /
-
-
hub.example.com
、spoke1.example.com
およびspoke2.example.com
の各データベースのoe
スキーマにあるorders
表およびorder_items
表に対して最新時刻競合解消を構成します。手順については、「ビルトインの更新の競合ハンドラ」を参照してください。
4.2.2 単一のプロシージャを使用したレプリケーション環境へのデータベースの追加
このトピックには、DBMS_STREAMS_ADM
パッケージのMAINTAIN_SCHEMAS
プロシージャを使用して、既存のハブ・アンド・スポーク・レプリケーション環境に新しいスポーク・データベースを追加する例が含まれます。この例を完了すると、Oracle Streamsレプリケーション環境によって、新しいデータベースのスキーマに対する変更がレプリケートされます。
具体的には、このトピックの例では、「ハブ・アンド・スポーク・レプリケーションを構成する例」で構成したレプリケーション環境を拡張します。この構成には、次のような特徴があります。
-
hr
スキーマが、hub.example.com
、spoke1.example.com
、およびspoke2.example.com
の各データベースでレプリケートされます。 -
hub.example.com
データベースが、ハブ・アンド・スポーク環境におけるハブ・データベースであり、他のデータベースがスポーク・データベースです。 -
スポーク・データベースでは、レプリケートされたスキーマへの変更が可能で、各データベースはそのローカル取得プロセスでこれらの変更を取得します。
この例では、環境にspoke3.example.com
データベースを追加します。
注意:
DBMS_STREAMS_ADM
パッケージの構成プロシージャを使用してOracle Streamsレプリケーション環境を拡張する前に、「Streamsレプリケーションの設定ウィザードまたは単一の構成プロシージャの使用について」で説明されている条件を環境が満たしていることを確認してください。
手順は次のとおりです。
-
次のタスクを完了して、新しいデータベースの環境を準備します。
-
ハブ・データベースが新しいスポーク・データベースと通信できるようにネットワーク接続を構成します。この例では、
hub.example.com
データベースとspoke3.example.com
データベースが相互に通信できるようにネットワーク接続を構成します。データベース間のネットワーク接続の構成については、『Oracle Database 2日でデータベース管理者』を参照してください。
-
新しいスポーク・データベースでOracle Streams管理者を構成します。この例では、
spoke3.example.com
データベースでOracle Streams管理者を構成します。手順については、「すべてのデータベースでのOracle Streams管理者の構成」を参照してください。この例では、Oracle Streams管理者がstrmadmin
であると想定しています。 -
ハブ・データベースから新しいスポーク・データベースおよび新しいスポーク・データベースからハブ・データベースへのデータベース・リンクを作成します。この例では、次のデータベース・リンクを作成します。
-
hub.example.com
データベースからspoke3.example.com
データベース。データベース・リンクの名前とサービス名の両方がspoke3.example.com
である必要があります。 -
spoke3.example.com
データベースからhub.example.com
データベース。データベース・リンクの名前とサービス名の両方がhub.example.com
である必要があります。
各データベース・リンクは、Oracle Streams管理者のスキーマに作成する必要があります。また、各データベース・リンクは、宛先データベースのOracle Streams管理者に接続する必要があります。手順については、「ネットワーク接続性とデータベース・リンクの構成」を参照してください。
-
-
新しいスポーク・データベースで初期化パラメータを正しく設定します。この例では、
spoke3.example.com
データベースで初期化パラメータを正しく設定します。手順については、「Oracle Streamsに関連する初期化パラメータの設定」を参照してください。 -
ARCHIVELOG
モードで実行するように新しいスポーク・データベースを構成します。取得プロセスがソース・データベースで生成された変更を取得するには、ソース・データベースをARCHIVELOG
モードで実行する必要があります。この例では、spoke3.example.com
データベースをARCHIVELOG
モードで実行する必要があります。ARCHIVELOG
モードで実行するためのデータベースの構成の詳細は、『Oracle Database管理者ガイド』を参照してください。 -
hub.example.com
データベースにhub_dir
ディレクトリ・オブジェクトが存在することを確認し、このオブジェクトから前の構成に関連するファイル(データ・ポンプ・エクスポート・ダンプ・ファイルおよびエクスポート・ログ・ファイルを含む)をすべて削除します。
-
-
SQL*Plusを開き、Oracle Streams管理者として
spoke3.example.com
データベースに接続します。SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。
-
MAINTAIN_SCHEMAS
プロシージャによって生成されるファイル(インスタンス化に使用されるデータ・ポンプ・エクスポート・ダンプ・ファイルを含む)を保持するディレクトリ・オブジェクトを作成します。ディレクトリ・オブジェクトのポイント先には、コンピュータ・システム上のアクセス可能な任意のディレクトリを指定できます。たとえば、次の文を実行すると、/usr/spoke3_log_filesディレクトリをポイントするspoke3_dir
ディレクトリ・オブジェクトが作成されます。CREATE DIRECTORY spoke3_dir AS '/usr/spoke3_log_files';
-
ハブ・アンド・スポーク環境で、ハブ・データベースの取得プロセスを停止します。
取得プロセスを停止するには、
DBMS_CAPTURE_ADM
パッケージのSTOP_CAPTURE
プロシージャを使用します。この例では、
hub.example.com
データベースの取得プロセスを停止します。取得プロセスの停止中、レプリケートされたデータベース・オブジェクトは変更に対してオープンなままにしておくことができます。これらの変更は、取得プロセスが再開されたときに取得されます。 -
SQL*Plusでは、ハブ・データベースで
DBMS_STREAMS_ADM
パッケージの適切な構成プロシージャを実行し、新しいスポーク・データベースを追加します。この例では、次の手順を実行します。
-
SQL*Plusを開き、Oracle Streams管理者として
hub.example.com
データベースに接続します。 -
MAINTAIN_SCHEMAS
プロシージャを実行して、Oracle Streamsレプリケーション環境にspoke3.example.com
データベースを追加します。BEGIN DBMS_STREAMS_ADM.MAINTAIN_SCHEMAS( schema_names => 'hr', source_directory_object => 'hub_dir', destination_directory_object => 'spoke3_dir', source_database => 'hub.example.com', destination_database => 'spoke3.example.com', capture_name => 'capture_hns', capture_queue_table => 'source_hns_qt', capture_queue_name => 'source_hns', propagation_name => 'propagation_spoke3', apply_name => 'apply_spoke3', apply_queue_table => 'destination_spoke3_qt', apply_queue_name => 'destination_spoke3', bi_directional => TRUE); END; /
MAINTAIN_SCHEMAS
プロシージャは多くの構成タスクを実行するため、実行に時間がかかる場合があります。プロシージャの実行中に宛先データベースの指定したスキーマにあるデータベース・オブジェクトに対するデータ操作言語(DML)またはデータ定義言語(DDL)変更を許可しないでください。プロシージャが完了すると、環境に新しいデータベース・オブジェクトが追加され、手順4で停止されていた取得プロセスが再開されます。capture_name
、capture_queue_table
およびcapture_queue_name
に指定されたパラメータ値は、レプリケーション環境を構成したDBMS_STREAMS_ADM
パッケージの構成プロシージャで指定されている値と同じである必要があります。この例では、これらのパラメータ値は、「ハブ・アンド・スポーク・レプリケーションを構成する例」で指定されている値と一致します。構成プロシージャの実行時、そのプロシージャの進捗に関する情報は、データ・ディクショナリ・ビュー
DBA_RECOVERABLE_SCRIPT
、DBA_RECOVERABLE_SCRIPT_PARAMS
、DBA_RECOVERABLE_SCRIPT_BLOCKS
およびDBA_RECOVERABLE_SCRIPT_ERRORS
に記録されます。プロシージャでエラーが発生してプロシージャが停止した場合は、『Oracle Streamsレプリケーション管理者ガイド』でDBMS_STREAMS_ADM
パッケージのRECOVER_OPERATION
プロシージャを使用したこれらのエラーからのリカバリ手順を参照してください。
-
-
spoke3.example.com
データベースのhr
スキーマにあるすべての表に対して最新時刻競合解消を構成します。このスキーマには、countries
、departments
、employees
、jobs
、job_history
、locations
およびregions
の表が含まれています。手順については、「ビルトインの更新の競合ハンドラ」を参照してください。
4.3 複数の手順でのコンポーネントの個別追加
この項では、Oracle Streamsコンポーネントを個別に追加することによるレプリケーション環境の拡張について説明します。Oracle Streamsコンポーネントには、キュー、ルール、ルール・セット、取得プロセス、同期取得、伝播および適用プロセスが含まれます。
この項の内容は次のとおりです。
注意:
-
可能な場合は、通常、単一のプロシージャまたはOracle Enterprise Manager Cloud ControlのStreamsレプリケーションの設定ウィザードを使用する方が、Oracle Streamsレプリケーション環境を簡単に拡張できます。単一のプロシージャを使用する手順については「単一のプロシージャを使用した複数のコンポーネントの追加」を、またウィザードを使用した手順についてはOracle Enterprise Manager Cloud Controlのオンライン・ヘルプを参照してください。
-
ここで説明する手順は、
DBMS_STREAMS_ADM
パッケージを使用してOracle Streams環境を構成する場合を想定しています。他のパッケージを使用する場合は、タスクごとに追加の手順が必要になることがあります。
4.3.1 既存の単一ソース環境へのレプリケート・オブジェクトの追加
既存の単一ソース環境に既存のデータベース・オブジェクトを追加するには、適切な取得プロセス、同期取得、伝播および適用プロセスに必要なルールを追加します。稼働中のOracle Streams環境で取得ルールまたは伝播ルールを作成または変更する前に、新規のルールまたは変更後のルールによって生じる論理変更レコード(LCR)を受信する伝播や適用プロセスが、これらのLCRを処理するように構成されていることを確認してください。つまり、伝播または適用プロセスが存在し、それぞれがLCRを適切に処理するルール・セットに関連付けられている必要があります。これらの伝播と適用プロセスがこれらのLCRを処理するように適切に構成されていないと、LCRが失われる可能性があります。
たとえば、すでに変更が取得、伝播されて他の表に適用されているOracle Streamsレプリケーション環境に、表を追加する必要がある場合を考えます。この表に対する変更を取得する取得プロセスまたは同期取得は1つのみで、この表に変更を適用する適用プロセスも1つのみであるとします。この場合は、次のルール・セットに表の1つ以上のルールを追加する必要があります。
-
表に変更を適用する適用プロセスのポジティブ・ルール・セット
-
表に対する変更を伝播する各伝播のポジティブ・ルール・セット
-
表に対する変更を取得する取得プロセスまたは同期取得のポジティブ・ルール・セット
管理手順を正しい順序で実行しないと、LCRが失われる可能性があります。たとえば、取得プロセスを停止せず、先に取得プロセスのルール・セットにルールを追加した場合、変更を伝播するように指示するルールがなければ伝播は変更を伝播せず、変更が失われる可能性があります。
この例では、レプリケートされたデータベース・オブジェクトが宛先データベースで読取り専用であることを想定しています。レプリケートされたデータベース・オブジェクトが宛先データベースで読取り/書込み可能である場合、宛先データベースのレプリケートされたデータベース・オブジェクトに対して行われた変更をレプリケートするようにOracle Streamsが構成されないため、レプリケーション環境では同期状態が保たれません。
図4-1に、レプリケートされたデータベース・オブジェクトを単一ソースOracle Streams環境に追加するために実行する必要がある追加の構成手順を示します。
LCRの消失を回避するには、構成手順を次の順序で完了します。
追加したルールによって生じる最初のLCRが適用プロセスに到達する前に、表またはスキーマがインスタンス化されるように、手順2で取得プロセスを停止するか、伝播ジョブの1つを無効化するか、適用プロセスを停止する必要があります。この操作を実行しないと、適用プロセスのルールを追加したかどうかに応じてLCRが失われたり、適用エラーが発生する可能性があります。
追加した表がこの手順の実行中にソース・データベースで変更されないことと、表のLCRがストリーム内にないことまたは取得を待機していないことが確実な場合は、手順6の前に手順7を実行して、Oracle Streamsプロセスや伝播ジョブの停止期間を短縮できます。
関連項目:
既存の単一ソース環境にオブジェクトを追加する場合の詳細な例は、『Oracle Streams拡張例』を参照してください。
4.3.2 単一ソース環境への新規宛先データベースの追加
既存の単一ソース環境に宛先データベースを追加するには、新規の宛先データベースで1つ以上の新規適用プロセスを作成し、必要な場合は、そのデータベースに変更を送信する1つ以上の伝播を構成します。また、新規宛先データベースに変更を送信するストリーム内の既存の伝播に、ルールの追加が必要になる場合があります。
「既存の単一ソース環境へのレプリケート・オブジェクトの追加」で説明した例と同様に、稼働中のOracle Streamsレプリケーション環境で伝播ルールを作成または変更する前に、新規のルールまたは変更後のルールによって生じる論理変更レコード(LCR)を受信する伝播や適用プロセスが、これらのLCRを処理するように構成されていることを確認してください。このように構成されていないと、LCRが失われる可能性があります。
この例では、レプリケートされたデータベース・オブジェクトが宛先データベースで読取り専用であることを想定しています。レプリケートされたデータベース・オブジェクトが宛先データベースで読取り/書込み可能である場合、宛先データベースのレプリケートされたデータベース・オブジェクトに対して行われた変更をレプリケートするようにOracle Streamsが構成されないため、レプリケーション環境では同期状態が保たれません。
図4-2に、宛先データベースを単一ソースOracle Streams環境に追加するために実行する必要がある追加の構成手順を示します。
LCRの消失を回避するために、構成手順を次の順序で完了する必要があります。
関連項目:
既存の単一ソース環境にデータベースを追加する場合の詳細な例は、『Oracle Streams拡張例』を参照してください。
4.3.3 既存の複数ソース環境へのレプリケート・オブジェクトの追加
既存の複数ソース環境に既存のデータベース・オブジェクトを追加するには、適切な取得プロセス、同期取得、伝播および適用プロセスに必要なルールを追加します。
この例では、次の用語を使用しています。
-
実装済データベース: 複数ソース環境に追加するレプリケートされたデータベース・オブジェクトがすでに含まれているデータベース。環境にオブジェクトを追加するには、少なくとも1つは実装済データベースが必要です。
-
エクスポート・データベース: 環境に追加するデータベース・オブジェクトのエクスポートを実行する実装済データベース。このエクスポートを使用して、追加したデータベース・オブジェクトがインポート・データベースでインスタンス化されます。すべてのデータベースが実装済データベースである環境では、エクスポート・データベースが存在しないことがあります。
-
インポート・データベース: 複数ソース環境に追加する前には、レプリケートされたデータベース・オブジェクトが含まれていないデータベース。レプリケートされたデータベース・オブジェクトのインポートを実行して、そのデータベース・オブジェクトをインポート・データベースでインスタンス化します。すべてのデータベースが実装済データベースである環境では、インポート・データベースが存在しないことがあります。
稼働中のOracle Streamsレプリケーション環境で取得ルールまたは伝播ルールを作成または変更する前に、新規のルールまたは変更後のルールによって生じる論理変更レコード(LCR)を受信する伝播や適用プロセスが、これらのLCRを処理するように構成されていることを確認してください。つまり、伝播または適用プロセスが存在し、それぞれがLCRを適切に処理するルール・セットに関連付けられている必要があります。これらの伝播と適用プロセスがこれらのLCRを処理するように適切に構成されていないと、LCRが失われる可能性があります。
たとえば、すでに変更が取得、伝播されて他の表に適用されているOracle Streamsレプリケーション環境に、新規の表を追加する必要がある場合を考えます。環境内の複数の取得プロセスまたは同期取得がこの表に対する変更を取得し、複数の適用プロセスがこの表に変更を適用するとします。この場合は、次のルール・セットに表の1つ以上のルールを追加する必要があります。
-
表に変更を適用する各適用プロセスのポジティブ・ルール・セット
-
表に対する変更を伝播する各伝播のポジティブ・ルール・セット
-
表に対する変更を取得する各取得プロセスまたは同期取得のポジティブ・ルール・セット
管理手順を正しい順序で実行しないと、LCRが失われる可能性があります。たとえば、取得プロセスを停止せず、先に取得プロセスのルール・セットにルールを追加した場合、変更を伝播するように指示するルールがなければ伝播は変更を伝播せず、変更が失われる可能性があります。
図4-3に、レプリケートされたデータベース・オブジェクトを複数ソースOracle Streams環境に追加するために実行する必要がある追加の構成手順を示します。
Oracle Streamsレプリケーション環境に複数のソース・データベースが存在する場合、変更の循環が発生する可能性があります。変更の循環は、変更が発生場所であるデータベースに再送されると発生します。通常は、変更の循環を回避する必要があります。レプリケーション環境を構成する前に、「Oracle Streamsタグ」を参照して、変更の循環が回避されるようにレプリケーション環境を構成してください。
LCRの消失を回避するには、構成手順を次の順序で完了します。
前述の手順を完了してから、環境に応じて次の各項の手順を完了します。各項の一方の手順のみを完了すればよい場合と、両方の手順を完了する必要がある場合があります。
-
各実装済データベースには、「レプリケート・オブジェクト追加時の実装済データベースの構成」の手順を実行します。この手順は、環境に複数の実装済データベースが存在する場合にのみ必要です。
-
各インポート・データベースには、「既存の環境におけるインポート・データベースへのレプリケート・オブジェクトの追加」の手順を実行します。
4.3.3.1 レプリケート・オブジェクト追加時の実装済データベースの構成
環境に複数の実装済データベースが存在する場合は、「既存の複数ソース環境へのレプリケート・オブジェクトの追加」の手順を完了してから、各実装済データベースについて次の手順を実行します。
4.3.3.2 既存の環境におけるインポート・データベースへのレプリケート・オブジェクトの追加
「既存の複数ソース環境へのレプリケート・オブジェクトの追加」の手順を完了した後に、インポート・データベースについて次の手順を実行します。
-
エクスポート・データベースとして使用する実装済データベースを選択します。まだインスタンス化は実行しないでください。
-
インポート・データベースごとに、インポート・データベースの宛先データベースとなる環境内の他のすべてのデータベースで、追加したデータベース・オブジェクトにインスタンス化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の設定」を参照してください。
-
4.3.3.3 複数ソース環境構成へのオブジェクトの追加の完了
構成を完了する前に、次のタスクを完了する必要があります。
-
「既存の環境におけるインポート・データベースへのレプリケート・オブジェクトの追加」(環境にインポート・データベースが存在する場合)
前述の構成手順をすべて完了してから、次の手順を行います。
4.3.4 既存の複数ソース環境への新規データベースの追加
図4-4に、ソース・データベースと宛先データベースを複数ソースOracle Streams環境に追加するために実行する必要がある追加の構成手順を示します。
Oracle Streamsレプリケーション環境に複数のソース・データベースが存在する場合、変更の循環が発生する可能性があります。変更の循環は、変更が発生場所であるデータベースに再送されると発生します。通常は、変更の循環を回避する必要があります。レプリケーション環境を構成する前に、「Oracle Streamsタグ」を参照して、変更の循環が回避されるようにレプリケーション環境を構成してください。
次の手順を実行して、既存の複数ソースOracle Streamsレプリケーション環境に新規ソース・データベースと宛先データベースを追加します。
注意:
Oracle Streamsレプリケーション環境に追加するデータベースでは、そのデータベースでのインスタンス化が完了するまでは、レプリケートされるデータベース・オブジェクトに対して変更が行われないことを確認してください。
前述の手順を完了してから、次の該当する項の手順を完了します。
-
新規データベースにレプリケートするオブジェクトが新規データベースに存在する場合は、「レプリケート・オブジェクトが新規データベースに存在する場合のデータベースの構成」の手順を実行します。
-
新規データベースにレプリケートするオブジェクトが新規データベースに存在しない場合は、「新規データベースへのレプリケート・オブジェクトの追加」の手順を実行します。
4.3.4.1 レプリケート・オブジェクトが新規データベースに存在する場合のデータベースの構成
新規データベースにレプリケートするオブジェクトがすでに新規データベースに存在する場合は、「既存の複数ソース環境への新規データベースの追加」の手順を完了してから次の手順を実行します。
4.3.4.2 新規データベースへのレプリケート・オブジェクトの追加
新規データベースと共有するデータベース・オブジェクトが新規データベースに存在しない場合は、「既存の複数ソース環境への新規データベースの追加」の手順を完了してから次の手順を実行します。
-
新規データベースが他のデータベースのソース・データベースである場合は、新規ソース・データベースの各宛先データベースで、新規データベースのインスタンス化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
などのエクスポート・パラメータを使用して、より厳密な一貫性レベルを指定できます。 -
手順2でインスタンス化のためのエクスポートを実行したソース・データベースを除き、新規データベースのソース・データベースごとに、新規データベースでインスタンス化SCNを設定します。これらのインスタンス化SCNの設定は必須であり、ソース・データベースで行われた、そのデータベースの対応するSCNより後にコミットされる変更のみが新規データベースに適用されます。
ソース・データベースごとに、これらのインスタンス化SCNを次のいずれかの方法で設定できます。
-
ソース・データベースでメタデータのみのエクスポートを実行し、そのメタデータを新規データベースでインポートします。このインポートによって、ソース・データベースに必須のインスタンス化SCNが、新規データベースで設定されます。この場合は、新規データベースのレプリケートされたデータベース・オブジェクトに、エクスポート時点でソース・データベースとの一貫性があることを確認してください。
DML変更のみをレプリケートする場合は、表レベルのエクスポート/インポートで十分です。DDL変更もレプリケートする場合は、追加の考慮事項があります。メタデータのエクスポート/インポートを実行する方法の詳細は、「エクスポート/インポートを使用したインスタンス化SCNの設定」を参照してください。
-
新規データベースで、レプリケートされたデータベース・オブジェクトについてインスタンス化SCNを手動で設定します。新規データベースのレプリケートされたデータベース・オブジェクトに、対応するインスタンス化SCNの時点でソース・データベースとの一貫性があることを確認してください。手順については、「DBMS_APPLY_ADMパッケージを使用したインスタンス化SCNの設定」を参照してください。
-
-
競合が発生する可能性がある場合は、新規データベースで競合解消を構成します。手順については、「Oracle Streamsの競合解消」を参照してください。
-
DBMS_APPLY_ADM
パッケージのSTART_APPLY
プロシージャを使用して、手順3で新規データベースにおいて作成した適用プロセスを起動します。 -
前述の項の手順4で他の各宛先データベースに作成した適用プロセスを起動します。新規データベースがソース・データベースでない場合は、この手順を実行しないでください。