この章では、既存のOracle Streamsレプリケーション環境にデータベース・オブジェクトおよびデータベースを追加する方法について説明します。
この章の内容は次のとおりです。
注意: 特定のタイプのデータベース・オブジェクトは、Oracle Streamsではサポートされません。Oracle Streams環境を拡張する場合、取得プロセスが、サポートされていないデータベース・オブジェクトに対する変更の取得を試行しないことを確認します。また、同期取得または適用プロセスが、サポートされていない列に対する変更の処理を試行しないことも確認します。サポートされていないデータベース・オブジェクトおよび列を表示するには、DBA_STREAMS_UNSUPPORTED およびDBA_STREAMS_COLUMNS データ・ディクショナリ・ビューを問い合せます。 |
関連項目:
|
組織でのニーズが変化すると、Oracle Streamsレプリケーション環境の拡張が必要な場合があります。Oracle Streamsレプリケーション環境は、データベース・オブジェクトまたはデータベースを追加することによって拡張できます。
Oracle Streamsレプリケーション環境の拡張には次の3つの方法があります。
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パッケージおよびタイプ・リファレンス』を参照してください。 |
Streamsレプリケーションの設定ウィザード、またはDBMS_STREAMS_ADM
パッケージの構成プロシージャを使用してOracle Streamsレプリケーション環境を拡張できない場合は、構成手順を手動で完了する必要があります。この手順には、必要なルールとOracle Streamsコンポーネントを環境に追加するなどの構成手順が含まれます。
Oracle Streamsレプリケーション環境を手動で拡張する必要がある場合は、「複数の手順でのコンポーネントの個別追加」で説明されている手順を参照してください。
この項では、DBMS_STREAMS_ADM
パッケージの単一のPL/SQLプロシージャを使用したOracle Streamsコンポーネントの追加について説明します。Oracle Streamsコンポーネントには、キュー、ルール、ルール・セット、取得プロセス、同期取得、伝播および適用プロセスが含まれます。
この項の内容は次のとおりです。
このトピックには、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
サンプル・スキーマにある表を使用します。oe
サンプル・スキーマはOracle Databaseとともにデフォルトでインストールされます。
注意: 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
表に対して最新時刻競合解消を構成します。手順については、「ビルトインの更新の競合ハンドラ」を参照してください。
このトピックには、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
の表が含まれています。手順については、「ビルトインの更新の競合ハンドラ」を参照してください。
この項では、Oracle Streamsコンポーネントを個別に追加することによるレプリケーション環境の拡張について説明します。Oracle Streamsコンポーネントには、キュー、ルール、ルール・セット、取得プロセス、同期取得、伝播および適用プロセスが含まれます。
この項の内容は次のとおりです。
注意:
|
既存の単一ソース環境に既存のデータベース・オブジェクトを追加するには、適切な取得プロセス、同期取得、伝播および適用プロセスに必要なルールを追加します。稼働中のOracle Streams環境で取得ルールまたは伝播ルールを作成または変更する前に、新規のルールまたは変更後のルールによって生じる論理変更レコード(LCR)を受信する伝播や適用プロセスが、これらのLCRを処理するように構成されていることを確認してください。つまり、伝播または適用プロセスが存在し、それぞれがLCRを適切に処理するルール・セットに関連付けられている必要があります。これらの伝播と適用プロセスがこれらのLCRを処理するように適切に構成されていないと、LCRが失われる可能性があります。
たとえば、すでに変更が取得、伝播されて他の表に適用されているOracle Streamsレプリケーション環境に、表を追加する必要がある場合を考えます。この表に対する変更を取得する取得プロセスまたは同期取得は1つのみで、この表に変更を適用する適用プロセスも1つのみであるとします。この場合は、次のルール・セットに表の1つ以上のルールを追加する必要があります。
表に変更を適用する適用プロセスのポジティブ・ルール・セット
表に対する変更を伝播する各伝播のポジティブ・ルール・セット
表に対する変更を取得する取得プロセスまたは同期取得のポジティブ・ルール・セット
管理手順を正しい順序で実行しないと、LCRが失われる可能性があります。たとえば、取得プロセスを停止せず、先に取得プロセスのルール・セットにルールを追加した場合、変更を伝播するように指示するルールがなければ伝播は変更を伝播せず、変更が失われる可能性があります。
この例では、レプリケートされたデータベース・オブジェクトが宛先データベースで読取り専用であることを想定しています。レプリケートされたデータベース・オブジェクトが宛先データベースで読取り/書込み可能である場合、宛先データベースのレプリケートされたデータベース・オブジェクトに対して行われた変更をレプリケートするようにOracle Streamsが構成されないため、レプリケーション環境では同期状態が保たれません。
図4-1に、レプリケートされたデータベース・オブジェクトを単一ソースOracle Streams環境に追加するために実行する必要がある追加の構成手順を示します。
LCRの消失を回避するには、構成手順を次の順序で完了します。
レプリケートされたデータベース・オブジェクトを追加する各ソース・データベースで、追加するレプリケートされたデータベース・オブジェクトのサプリメンタル・ロギングを指定します。手順については、「サプリメンタル・ロギングの指定」を参照してください。
取得プロセス、1つの伝播または適用プロセスを停止します。
取得プロセスを停止するには、DBMS_CAPTURE_ADM
パッケージのSTOP_CAPTURE
プロシージャを使用します。
伝播を停止するには、DBMS_PROPAGATION_ADM
パッケージのSTOP_PROPAGATION
プロシージャを使用します。
適用プロセスを停止するには、DBMS_APPLY_ADM
パッケージのSTOP_APPLY
プロシージャを使用します。
通常は、操作中にメッセージがキューに蓄積されないように、取得プロセスを停止することをお薦めします。
注意: 同期取得は停止できません。 |
関連項目: PL/SQLプロシージャを使用してこれらのタスクを実行する方法の詳細は、『Oracle Streams概要および管理』を参照してください。 |
適用プロセスのルール・セットに、関連ルールを追加します。適用プロセスのルール・セットにルールを追加するには、次のいずれかの手順を実行します。
DBMS_STREAMS_ADM.ADD_TABLE_RULES
DBMS_STREAMS_ADM.ADD_SUBSET_RULES
DBMS_STREAMS_ADM.ADD_SCHEMA_RULES
DBMS_STREAMS_ADM.ADD_GLOBAL_RULES
ADD_SUBSET_RULES
プロシージャ以外のこれらのプロシージャでは、適用プロセスのポジティブ・ルール・セットまたはネガティブ・ルール・セットにルールを追加できます。ADD_SUBSET_RULES
プロシージャでは、適用プロセスのポジティブ・ルール・セットにのみルールを追加できます。
伝播のルール・セットに、関連ルールを追加します。伝播のルール・セットにルールを追加するには、次のいずれかのプロシージャを実行します。
DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES
DBMS_STREAMS_ADM.ADD_SUBSET_PROPAGATION_RULES
DBMS_STREAMS_ADM.ADD_SCHEMA_PROPAGATION_RULES
DBMS_STREAMS_ADM.ADD_GLOBAL_PROPAGATION_RULES
ADD_SUBSET_PROPAGATION_RULES
プロシージャ以外のこれらのプロシージャでは、伝播のポジティブ・ルール・セットまたはネガティブ・ルール・セットにルールを追加できます。ADD_SUBSET_PROPAGATION_RULES
プロシージャでは、伝播のポジティブ・ルール・セットにのみルールを追加できます。
取得プロセスまたは同期取得で使用するルール・セットに関連ルールを追加します。既存の取得プロセスのルール・セットにルールを追加するには、次のいずれかのプロシージャを使用して既存の取得プロセスを指定できます。
DBMS_STREAMS_ADM.ADD_TABLE_RULES
DBMS_STREAMS_ADM.ADD_SUBSET_RULES
DBMS_STREAMS_ADM.ADD_SCHEMA_RULES
DBMS_STREAMS_ADM.ADD_GLOBAL_RULES
ADD_SUBSET_RULES
プロシージャ以外のこれらのプロシージャでは、取得プロセスのポジティブ・ルール・セットまたはネガティブ・ルール・セットにルールを追加できます。ADD_SUBSET_RULES
プロシージャでは、取得プロセスのポジティブ・ルール・セットにのみルールを追加できます。
既存の同期取得のルール・セットにルールを追加するには、次のいずれかのプロシージャを使用して既存の同期取得を指定できます。
DBMS_STREAMS_ADM.ADD_TABLE_RULES
DBMS_STREAMS_ADM.ADD_SUBSET_RULES
DBMS_STREAMS_ADM
パッケージのプロシージャを使用して取得プロセスのルールを追加すると、その取得プロセスがソース・データベースへのデータベース・リンクを持つローカル取得プロセスまたはダウンストリーム取得プロセスである場合は、指定した表、指定したスキーマまたはデータベース全体に対して、それぞれDBMS_CAPTURE_ADM
パッケージのPREPARE_TABLE_INSTANTIATION
、PREPARE_SCHEMA_INSTANTIATION
またはPREPARE_GLOBAL_INSTANTIATION
プロシージャが自動的に実行されます。
次のいずれかの条件に該当する場合は、適切なプロシージャを実行してインスタンス化の準備を手動で行う必要があります。
DBMS_RULE_ADM
を使用して、取得プロセスのルール・セット内でルールを作成または変更する場合。
取得プロセスは追加されるオブジェクトに対する変更をすでに取得しているため、取得プロセスのルール・セットにはこれらのオブジェクトのルールを追加しない場合。この場合、オブジェクトのルールを環境内の伝播と適用プロセスには追加できますが、取得プロセスには追加できません。
ソース・データベースへのデータベース・リンクを持たないダウンストリーム取得プロセスを使用する場合。
インスタンス化の準備を手動で行う必要がある場合の手順については、「ソース・データベースでインスタンス化を行うためのデータベース・オブジェクトの準備」を参照してください。
DBMS_STREAMS_ADM
パッケージのプロシージャを使用して同期取得のルールを追加すると、指定した表に対してDBMS_CAPTURE_ADM
パッケージのPREPARE_SYNC_INSTANTIATION
ファンクションが自動的に実行されます。
各宛先データベースで、Oracle Streams環境に追加する各データベース・オブジェクトをインスタンス化するか、そのインスタンス化SCNを設定します。宛先データベースにデータベース・オブジェクトが存在しない場合は、エクスポート/インポート、トランスポータブル表領域またはRMANを使用してインスタンス化します。宛先データベースにデータベース・オブジェクトが存在する場合は、そのインスタンス化SCNを手動で設定します。
エクスポート/インポートを使用してデータベース・オブジェクトをインスタンス化するには、まずソース・データベースでそれらのデータベース・オブジェクトをエクスポートします。次に、宛先データベースでそれらのオブジェクトをインポートします。第8章「インスタンス化と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の設定」を参照してください。
手順2で停止したOracle Streamsクライアントを起動します。
DBMS_CAPTURE_ADM
パッケージのSTART_CAPTURE
プロシージャを使用して、取得プロセスを起動します。
DBMS_PROPAGATION_ADM
パッケージのSTART_PROPAGATION
プロシージャを使用して、伝播を起動します。
DBMS_APPLY_ADM
パッケージのSTART_APPLY
プロシージャを使用して、適用プロセスを起動します。
関連項目: PL/SQLプロシージャを使用してこれらのタスクを実行する方法の詳細は、『Oracle Streams概要および管理』を参照してください。 |
追加したルールによって生じる最初のLCRが適用プロセスに到達する前に、表またはスキーマがインスタンス化されるように、手順2で取得プロセスを停止するか、伝播ジョブの1つを無効化するか、適用プロセスを停止する必要があります。この操作を実行しないと、適用プロセスのルールを追加したかどうかに応じてLCRが失われたり、適用エラーが発生する可能性があります。
追加した表がこの手順の実行中にソース・データベースで変更されないことと、表のLCRがストリーム内にないことまたは取得を待機していないことが確実な場合は、手順6の前に手順7を実行して、Oracle Streamsプロセスや伝播ジョブの停止期間を短縮できます。
関連項目: 既存の単一ソース環境にオブジェクトを追加する場合の詳細な例は、『Oracle Streams拡張例』を参照してください。 |
既存の単一ソース環境に宛先データベースを追加するには、新規の宛先データベースで1つ以上の新規適用プロセスを作成し、必要な場合は、そのデータベースに変更を送信する1つ以上の伝播を構成します。また、新規宛先データベースに変更を送信するストリーム内の既存の伝播に、ルールの追加が必要になる場合があります。
「既存の単一ソース環境へのレプリケート・オブジェクトの追加」で説明した例と同様に、稼働中のOracle Streamsレプリケーション環境で伝播ルールを作成または変更する前に、新規のルールまたは変更後のルールによって生じる論理変更レコード(LCR)を受信する伝播や適用プロセスが、これらのLCRを処理するように構成されていることを確認してください。このように構成されていないと、LCRが失われる可能性があります。
この例では、レプリケートされたデータベース・オブジェクトが宛先データベースで読取り専用であることを想定しています。レプリケートされたデータベース・オブジェクトが宛先データベースで読取り/書込み可能である場合、宛先データベースのレプリケートされたデータベース・オブジェクトに対して行われた変更をレプリケートするようにOracle Streamsが構成されないため、レプリケーション環境では同期状態が保たれません。
図4-2に、宛先データベースを単一ソースOracle Streams環境に追加するために実行する必要がある追加の構成手順を示します。
LCRの消失を回避するために、構成手順を次の順序で完了する必要があります。
次に示す必要なタスクを完了し、Oracle Streams用の環境内で各データベースを準備します。「Oracle Streamsレプリケーションを構成する前に実行するタスク」を参照してください。
これらのタスクの一部は、一部のデータベースでは不要な場合があります。
必要なANYDATA
キューを作成します(宛先データベースに存在しない場合)。適用プロセスを作成するときに、その適用プロセスを特定のANYDATA
キューに関連付けます。手順については、「ANYDATAキューの作成」を参照してください。
新規の宛先データベースで、ソース・データベースからの変更を適用できるように1つ以上の適用プロセスを作成します。各適用プロセスで、変更の適用に適切なルール・セットが使用されることを確認します。新規データベースでは適用プロセスを起動しないでください。手順については、第7章「暗黙的適用の構成」を参照してください。
適用プロセスを停止したままにすると、ソース・データベースで行われた変更は新規データベースのインスタンス化が完了するまで適用されません。適用プロセスを起動すると、データが不正になったりエラーが発生する場合があります。
必要な伝播を、ソース・データベースからの変更を新規の宛先データベースに送信するように構成します。各伝播で変更の伝播に適切なルール・セットが使用されることを確認します。「ANYDATAキュー間のOracle Streamsの伝播の作成」を参照してください。
ソース・データベースで、新規の宛先データベースの適用プロセスによって変更が適用される各データベース・オブジェクトについて、インスタンス化の準備を行います。
1つ以上の取得プロセスを使用している場合は、指定した表、指定したスキーマまたはデータベース全体に対して、それぞれDBMS_CAPTURE_ADM
パッケージのPREPARE_TABLE_INSTANTIATION
、PREPARE_SCHEMA_INSTANTIATION
またはPREPARE_GLOBAL_INSTANTIATION
プロシージャを実行します。
1つ以上の同期取得を使用している場合は、指定した表に対してDBMS_CAPTURE_ADM
パッケージのPREPARE_SYNC_INSTANTIATION
ファンクションを実行します。
新規の宛先データベースで、適用プロセスによって変更が適用される各データベース・オブジェクトをインスタンス化するか、そのインスタンス化SCNを設定します。新規の宛先データベースにデータベース・オブジェクトが存在しない場合は、エクスポート/インポート、トランスポータブル表領域またはRMANを使用してインスタンス化します。新規の宛先データベースにデータベース・オブジェクトが存在する場合は、そのインスタンス化SCNを設定します。
エクスポート/インポートを使用してデータベース・オブジェクトをインスタンス化するには、まずソース・データベースでそれらのデータベース・オブジェクトをエクスポートします。次に、宛先データベースでそれらのオブジェクトをインポートします。第8章「インスタンス化と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
プロシージャを使用して、手順3で作成した適用プロセスを起動します。
関連項目: 既存の単一ソース環境にデータベースを追加する場合の詳細な例は、『Oracle Streams拡張例』を参照してください。 |
既存の複数ソース環境に既存のデータベース・オブジェクトを追加するには、適切な取得プロセス、同期取得、伝播および適用プロセスに必要なルールを追加します。
この例では、次の用語を使用しています。
実装済データベース: 複数ソース環境に追加するレプリケートされたデータベース・オブジェクトがすでに含まれているデータベース。環境にオブジェクトを追加するには、少なくとも1つは実装済データベースが必要です。
エクスポート・データベース: 環境に追加するデータベース・オブジェクトのエクスポートを実行する実装済データベース。このエクスポートを使用して、追加したデータベース・オブジェクトがインポート・データベースでインスタンス化されます。すべてのデータベースが実装済データベースである環境では、エクスポート・データベースが存在しないことがあります。
インポート・データベース: 複数ソース環境に追加する前には、レプリケートされたデータベース・オブジェクトが含まれていないデータベース。レプリケートされたデータベース・オブジェクトのインポートを実行して、そのデータベース・オブジェクトをインポート・データベースでインスタンス化します。すべてのデータベースが実装済データベースである環境では、インポート・データベースが存在しないことがあります。
稼働中のOracle Streamsレプリケーション環境で取得ルールまたは伝播ルールを作成または変更する前に、新規のルールまたは変更後のルールによって生じる論理変更レコード(LCR)を受信する伝播や適用プロセスが、これらのLCRを処理するように構成されていることを確認してください。つまり、伝播または適用プロセスが存在し、それぞれがLCRを適切に処理するルール・セットに関連付けられている必要があります。これらの伝播と適用プロセスがこれらのLCRを処理するように適切に構成されていないと、LCRが失われる可能性があります。
たとえば、すでに変更が取得、伝播されて他の表に適用されているOracle Streamsレプリケーション環境に、新規の表を追加する必要がある場合を考えます。環境内の複数の取得プロセスまたは同期取得がこの表に対する変更を取得し、複数の適用プロセスがこの表に変更を適用するとします。この場合は、次のルール・セットに表の1つ以上のルールを追加する必要があります。
表に変更を適用する各適用プロセスのポジティブ・ルール・セット
表に対する変更を伝播する各伝播のポジティブ・ルール・セット
表に対する変更を取得する各取得プロセスまたは同期取得のポジティブ・ルール・セット
管理手順を正しい順序で実行しないと、LCRが失われる可能性があります。たとえば、取得プロセスを停止せず、先に取得プロセスのルール・セットにルールを追加した場合、変更を伝播するように指示するルールがなければ伝播は変更を伝播せず、変更が失われる可能性があります。
図4-3に、レプリケートされたデータベース・オブジェクトを複数ソースOracle Streams環境に追加するために実行する必要がある追加の構成手順を示します。
Oracle Streamsレプリケーション環境に複数のソース・データベースが存在する場合、変更の循環が発生する可能性があります。変更の循環は、変更が発生場所であるデータベースに再送されると発生します。通常は、変更の循環を回避する必要があります。レプリケーション環境を構成する前に、第10章「Oracle Streamsタグ」を参照して、変更の循環が回避されるようにレプリケーション環境を構成してください。
LCRの消失を回避するには、構成手順を次の順序で完了します。
各実装済データベースで、環境に追加するオブジェクトに必要なサプリメンタル・ロギングを指定します。手順については、「サプリメンタル・ロギングの指定」を参照してください。
追加したオブジェクトに対する変更を取得する取得プロセスをすべて停止するか、それを伝播する伝播をすべて停止するか、または追加したオブジェクトに変更を適用する適用プロセスをすべて停止します。
取得プロセスを停止するには、DBMS_CAPTURE_ADM
パッケージのSTOP_CAPTURE
プロシージャを使用します。
伝播を停止するには、DBMS_PROPAGATION_ADM
パッケージのSTOP_PROPAGATION
プロシージャを使用します。
適用プロセスを停止するには、DBMS_APPLY_ADM
パッケージのSTOP_APPLY
プロシージャを使用します。
通常は、操作中にメッセージがキューに蓄積されないように、取得プロセスを停止することをお薦めします。
注意: 同期取得は停止できません。 |
関連項目: PL/SQLプロシージャを使用してこれらのタスクを実行する方法の詳細は、『Oracle Streams概要および管理』を参照してください。 |
追加したオブジェクトに変更を適用する適用プロセスについて、ルール・セットに関連ルールを追加します。適用プロセスのルール・セットにルールを追加するには、次のいずれかの手順を実行します。
DBMS_STREAMS_ADM.ADD_TABLE_RULES
DBMS_STREAMS_ADM.ADD_SUBSET_RULES
DBMS_STREAMS_ADM.ADD_SCHEMA_RULES
DBMS_STREAMS_ADM.ADD_GLOBAL_RULES
ADD_SUBSET_RULES
プロシージャ以外のこれらのプロシージャでは、適用プロセスのポジティブ・ルール・セットまたはネガティブ・ルール・セットにルールを追加できます。ADD_SUBSET_RULES
プロシージャでは、適用プロセスのポジティブ・ルール・セットにのみルールを追加できます。
追加したオブジェクトに変更を伝播する伝播について、ルール・セットに関連ルールを追加します。伝播のルール・セットにルールを追加するには、次のいずれかのプロシージャを実行します。
DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES
DBMS_STREAMS_ADM.ADD_SUBSET_PROPAGATION_RULES
DBMS_STREAMS_ADM.ADD_SCHEMA_PROPAGATION_RULES
DBMS_STREAMS_ADM.ADD_GLOBAL_PROPAGATION_RULES
ADD_SUBSET_PROPAGATION_RULES
プロシージャ以外のこれらのプロシージャでは、伝播のポジティブ・ルール・セットまたはネガティブ・ルール・セットにルールを追加できます。ADD_SUBSET_PROPAGATION_RULES
プロシージャでは、伝播のポジティブ・ルール・セットにのみルールを追加できます。
追加したオブジェクトに対する変更を取得する各取得プロセスまたは同期取得で使用されるルール・セットに、関連ルールを追加します。既存の取得プロセスのルール・セットにルールを追加するには、次のいずれかのプロシージャを使用して既存の取得プロセスを指定できます。
DBMS_STREAMS_ADM.ADD_TABLE_RULES
DBMS_STREAMS_ADM.ADD_SUBSET_RULES
DBMS_STREAMS_ADM.ADD_SCHEMA_RULES
DBMS_STREAMS_ADM.ADD_GLOBAL_RULES
ADD_SUBSET_RULES
プロシージャ以外のこれらのプロシージャでは、取得プロセスのポジティブ・ルール・セットまたはネガティブ・ルール・セットにルールを追加できます。ADD_SUBSET_RULES
プロシージャでは、取得プロセスのポジティブ・ルール・セットにのみルールを追加できます。
既存の同期取得のルール・セットにルールを追加するには、次のいずれかのプロシージャを使用して既存の同期取得を指定できます。
DBMS_STREAMS_ADM.ADD_TABLE_RULES
DBMS_STREAMS_ADM.ADD_SUBSET_RULES
DBMS_STREAMS_ADM
パッケージのプロシージャを使用して取得プロセスのルールを追加すると、その取得プロセスがソース・データベースへのデータベース・リンクを持つローカル取得プロセスまたはダウンストリーム取得プロセスである場合は、指定した表、指定したスキーマまたはデータベース全体に対して、それぞれDBMS_CAPTURE_ADM
パッケージのPREPARE_TABLE_INSTANTIATION
、PREPARE_SCHEMA_INSTANTIATION
またはPREPARE_GLOBAL_INSTANTIATION
プロシージャが自動的に実行されます。
次のいずれかの条件に該当する場合は、適切なプロシージャを実行してインスタンス化の準備を手動で行う必要があります。
DBMS_RULE_ADM
を使用して、取得プロセスのルール・セット内でルールを作成または変更する場合。
取得プロセスは追加されるオブジェクトに対する変更をすでに取得しているため、取得プロセスのルール・セットにはこれらのオブジェクトのルールを追加しない場合。この場合、オブジェクトのルールを環境内の伝播と適用プロセスには追加できますが、取得プロセスには追加できません。
ソース・データベースへのデータベース・リンクを持たないダウンストリーム取得プロセスを使用する場合。
インスタンス化の準備を手動で行う必要がある場合の手順については、「ソース・データベースでインスタンス化を行うためのデータベース・オブジェクトの準備」を参照してください。
DBMS_STREAMS_ADM
パッケージのプロシージャを使用して同期取得のルールを追加すると、指定した表に対してDBMS_CAPTURE_ADM
パッケージのPREPARE_SYNC_INSTANTIATION
ファンクションが自動的に実行されます。
前述の手順を完了してから、環境に応じて次の各項の手順を完了します。各項の一方の手順のみを完了すればよい場合と、両方の手順を完了する必要がある場合があります。
各実装済データベースには、「レプリケート・オブジェクト追加時の実装済データベースの構成」の手順を実行します。この手順は、環境に複数の実装済データベースが存在する場合にのみ必要です。
各インポート・データベースには、「既存の環境におけるインポート・データベースへのレプリケート・オブジェクトの追加」の手順を実行します。
環境に複数の実装済データベースが存在する場合は、「既存の複数ソース環境へのレプリケート・オブジェクトの追加」の手順を完了してから、各実装済データベースについて次の手順を実行します。
実装済データベースごとに、環境内の他の各実装済データベースで追加した各オブジェクトにインスタンス化SCNを設定します。これらのインスタンス化SCNの設定は必須であり、特定の実装済データベースで行われた、そのデータベースの対応するSCNより後にコミットされる変更のみが、もう一方の実装済データベースに適用されます。
実装済データベースごとに、追加した各データベース・オブジェクトにこれらのインスタンス化SCNを次のいずれかの方法で設定できます。
追加したデータベース・オブジェクトのメタデータのみのエクスポートを実装済データベースで実行し、そのメタデータを他のそれぞれの実装済データベースでインポートします。このインポートによって、データベースに必須のインスタンス化SCNが、他のデータベースで設定されます。行がインポートされないことを確認してください。また、他の各実装済データベースのレプリケートされたデータベース・オブジェクトに、エクスポートを実行した実装済データベースとのエクスポート時点での一貫性があることを確認してください。
DML変更のみをレプリケートする場合は、表レベルのエクスポート/インポートで十分です。DDL変更もレプリケートする場合は、追加の考慮事項があります。メタデータのエクスポート/インポートを実行する方法の詳細は、「エクスポート/インポートを使用したインスタンス化SCNの設定」を参照してください。
他の各実装済データベースで、追加したオブジェクトについてインスタンス化SCNを手動で設定します。各実装済データベースに追加した各データベース・オブジェクトに、そのデータベースで設定したインスタンス化SCNとの一貫性があることを確認してください。手順については、「DBMS_APPLY_ADMパッケージを使用したインスタンス化SCNの設定」を参照してください。
「既存の複数ソース環境へのレプリケート・オブジェクトの追加」の手順を完了した後に、インポート・データベースについて次の手順を実行します。
エクスポート・データベースとして使用する実装済データベースを選択します。まだインスタンス化は実行しないでください。
インポート・データベースごとに、インポート・データベースの宛先データベースとなる環境内の他のすべてのデータベースで、追加したデータベース・オブジェクトにインスタンス化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で選択したエクスポート・データベースで、レプリケートされたデータベース・オブジェクトのエクスポートを実行します。次に、各インポート・データベースでレプリケート・オブジェクトのインポートを実行します。エクスポート/インポートの使用方法の詳細は、第8章「インスタンス化とOracle Streamsレプリケーション」および『Oracle Databaseユーティリティ』を参照してください。
ソース・データベースでのデータベース・オブジェクトのエクスポート中、それらのデータベース・オブジェクトに対する変更は許可しないでください。宛先データベースでのデータベース・オブジェクトのインポート中、それらのデータベース・オブジェクトに対する変更は許可しないでください。
FLASHBACK_SCN
やFLASHBACK_TIME
などのエクスポート・パラメータを使用して、より厳密な一貫性レベルを指定できます。
エクスポート・データベース以外の実装済データベースごとに、実装済ソース・データベースの宛先データベースとなる各インポート・データベースで、追加したデータベース・オブジェクトにインスタンス化SCNを設定します。これらのインスタンス化SCNの設定は必須であり、実装済データベースで行われた、そのデータベースの対応するSCNより後にコミットされる変更のみがインポート・データベースに適用されます。
実装済データベースごとに、追加したオブジェクトにこれらのインスタンス化SCNを次のいずれかの方法で設定できます。
追加したデータベース・オブジェクトのメタデータのみのエクスポートを実装済データベースで実行し、そのメタデータを各インポート・データベースでインポートします。各インポートによって、実装済データベースに必須のインスタンス化SCNが、インポート・データベースで設定されます。この場合は、インポート・データベースで追加した各データベース・オブジェクトに、エクスポート時点で実装済データベースとの一貫性があることを確認してください。
DML変更のみをレプリケートする場合は、表レベルのエクスポート/インポートで十分です。DDL変更もレプリケートする場合は、追加の考慮事項があります。メタデータのエクスポート/インポートを実行する方法の詳細は、「エクスポート/インポートを使用したインスタンス化SCNの設定」を参照してください。
各インポート・データベースで、追加したオブジェクトについてインスタンス化SCNを手動で設定します。各インポート・データベースで追加した各オブジェクトに、対応するインスタンス化SCNの時点で実装済データベースとの一貫性があることを確認してください。手順については、「DBMS_APPLY_ADMパッケージを使用したインスタンス化SCNの設定」を参照してください。
構成を完了する前に、次のタスクを完了する必要があります。
環境に複数の実装済データベースが存在する場合は、「レプリケート・オブジェクト追加時の実装済データベースの構成」
「既存の環境におけるインポート・データベースへのレプリケート・オブジェクトの追加」(環境にインポート・データベースが存在する場合)
前述の構成手順をすべて完了してから、次の手順を行います。
競合が発生する可能性がある場合は、各データベースで、追加したデータベース・オブジェクトに対する競合解消を構成します。手順については、第9章「Oracle Streamsの競合解消」を参照してください。
「既存の複数ソース環境へのレプリケート・オブジェクトの追加」の手順2で停止した各Oracle Streamsクライアントを起動します。
DBMS_CAPTURE_ADM
パッケージのSTART_CAPTURE
プロシージャを使用して、取得プロセスを起動します。
DBMS_PROPAGATION_ADM
パッケージのSTART_PROPAGATION
プロシージャを使用して、伝播を起動します。
DBMS_APPLY_ADM
パッケージのSTART_APPLY
プロシージャを使用して、適用プロセスを起動します。
関連項目: PL/SQLプロシージャを使用してこれらのタスクを実行する方法の詳細は、『Oracle Streams概要および管理』を参照してください。 |
図4-4に、ソース・データベースと宛先データベースを複数ソースOracle Streams環境に追加するために実行する必要がある追加の構成手順を示します。
Oracle Streamsレプリケーション環境に複数のソース・データベースが存在する場合、変更の循環が発生する可能性があります。変更の循環は、変更が発生場所であるデータベースに再送されると発生します。通常は、変更の循環を回避する必要があります。レプリケーション環境を構成する前に、第10章「Oracle Streamsタグ」を参照して、変更の循環が回避されるようにレプリケーション環境を構成してください。
次の手順を実行して、既存の複数ソースOracle Streamsレプリケーション環境に新規ソース・データベースと宛先データベースを追加します。
注意: Oracle Streamsレプリケーション環境に追加するデータベースでは、そのデータベースでのインスタンス化が完了するまでは、レプリケートされるデータベース・オブジェクトに対して変更が行われないことを確認してください。 |
次に示す必要なタスクを完了し、Oracle Streams用の環境内で各データベースを準備します。「Oracle Streamsレプリケーションを構成する前に実行するタスク」を参照してください。
これらのタスクの一部は、一部のデータベースでは不要な場合があります。
必要なANYDATA
キューを作成します(存在しない場合)。取得プロセス、同期取得または適用プロセスを作成するときに、そのプロセスを特定のANYDATA
キューに関連付けます。伝播を作成するときには、その伝播を特定のソース・キューおよび宛先キューに関連付けます。手順については、「ANYDATAキューの作成」を参照してください。
新規データベースで、ソース・データベースからの変更を適用できるように1つ以上の適用プロセスを作成します。各適用プロセスで、変更の適用に適切なルール・セットが使用されることを確認します。新規データベースでは適用プロセスを起動しないでください。手順については、第7章「暗黙的適用の構成」を参照してください。
適用プロセスを停止したままにすると、ソース・データベースで行われた変更は新規データベースのインスタンス化が完了するまで適用されません。適用プロセスを起動すると、データが不正になったりエラーが発生する場合があります。
新規データベースがソース・データベースとなる場合は、新規データベースで行われる変更の宛先データベースとなる全データベースで、新規データベースからの変更を適用する1つ以上の適用プロセスを作成します。各適用プロセスで、変更の適用に適切なルール・セットが使用されることを確認します。これらの新規適用プロセスは起動しないでください。手順については、第7章「暗黙的適用の構成」を参照してください。
新規データベースのソース・データベースとなるデータベースで、変更を新規データベースに送信するように伝播を構成します。各伝播で変更の伝播に適切なルール・セットが使用されることを確認します。「ANYDATAキュー間のOracle Streamsの伝播の作成」を参照してください。
新規データベースがソース・データベースとなる場合は、そこでの変更を各宛先データベースに送信するように、新規データベースで伝播を構成します。各伝播で変更の伝播に適切なルール・セットが使用されることを確認します。「ANYDATAキュー間のOracle Streamsの伝播の作成」を参照してください。
新規データベースがソース・データベースとなり、そこに既存のレプリケートされたデータベース・オブジェクトがある場合は、そのレプリケートされたデータベース・オブジェクトに必要なサプリメンタル・ロギングを指定します。手順については、「サプリメンタル・ロギングの指定」を参照してください。
新規データベースの各ソース・データベースで、新規データベースの適用プロセスによって変更が適用される各データベース・オブジェクトについて、インスタンス化の準備を行います。
1つ以上の取得プロセスを使用している場合は、指定した表、指定したスキーマまたはデータベース全体に対して、それぞれDBMS_CAPTURE_ADM
パッケージのPREPARE_TABLE_INSTANTIATION
、PREPARE_SCHEMA_INSTANTIATION
またはPREPARE_GLOBAL_INSTANTIATION
プロシージャを実行します。
1つ以上の同期取得を使用している場合は、指定した表に対してDBMS_CAPTURE_ADM
パッケージのPREPARE_TABLE_INSTANTIATION
プロシージャを実行します。
手順については、「ソース・データベースでインスタンス化を行うためのデータベース・オブジェクトの準備」を参照してください。
新規データベースがソース・データベースとなる場合は、関連する変更を取得するために1つ以上の取得プロセスまたは同期取得を作成します。手順については、第5章「暗黙的取得の構成」を参照してください。取得プロセスを使用する場合、各ソース・データベースには1つのみの取得プロセスを使用することをお薦めします。
DBMS_STREAMS_ADM
パッケージのプロシージャを使用して取得プロセスのルールを追加すると、その取得プロセスがソース・データベースへのデータベース・リンクを持つローカル取得プロセスまたはダウンストリーム取得プロセスである場合は、指定した表、指定したスキーマまたはデータベース全体に対して、それぞれDBMS_CAPTURE_ADM
パッケージのPREPARE_TABLE_INSTANTIATION
、PREPARE_SCHEMA_INSTANTIATION
またはPREPARE_GLOBAL_INSTANTIATION
プロシージャが自動的に実行されます。
次のいずれかの条件に該当する場合は、適切なプロシージャを実行してインスタンス化の準備を手動で行う必要があります。
DBMS_RULE_ADM
パッケージを使用してルールを追加または変更する場合。
既存の取得プロセスを使用し、レプリケートされたデータベース・オブジェクトの取得プロセスのルールは追加しない場合。
ソース・データベースへのデータベース・リンクを持たないダウンストリーム取得プロセスを使用する場合。
インスタンス化の準備を手動で行う必要がある場合の手順については、「ソース・データベースでインスタンス化を行うためのデータベース・オブジェクトの準備」を参照してください。
DBMS_STREAMS_ADM
パッケージのプロシージャを使用して同期取得のルールを追加すると、指定した表に対してDBMS_CAPTURE_ADM
パッケージのPREPARE_SYNC_INSTANTIATION
ファンクションが自動的に実行されます。
新規データベースがソース・データベースとなる場合は、DBMS_CAPTURE_ADM
パッケージのSTART_CAPTURE
プロシージャを使用して、手順9で作成した取得プロセスを起動します。
前述の手順を完了してから、次の該当する項の手順を完了します。
新規データベースにレプリケートするオブジェクトが新規データベースに存在する場合は、「レプリケート・オブジェクトが新規データベースに存在する場合のデータベースの構成」の手順を実行します。
新規データベースにレプリケートするオブジェクトが新規データベースに存在しない場合は、「新規データベースへのレプリケート・オブジェクトの追加」の手順を実行します。
新規データベースにレプリケートするオブジェクトがすでに新規データベースに存在する場合は、「既存の複数ソース環境への新規データベースの追加」の手順を完了してから次の手順を実行します。
新規データベースのソース・データベースごとに、新規データベースでインスタンス化SCNを設定します。これらのインスタンス化SCNの設定は必須であり、ソース・データベースで行われた、そのデータベースの対応するSCNより後にコミットされる変更のみが新規データベースに適用されます。
新規データベースのソース・データベースごとに、これらのインスタンス化SCNを次のいずれかの方法で設定できます。
レプリケートされたデータベース・オブジェクトのメタデータのみのエクスポートをソース・データベースで実行し、そのメタデータを新規データベースでインポートします。このインポートによって、ソース・データベースに必須のインスタンス化SCNが、新規データベースで設定されます。行がインポートされないことを確認してください。この場合は、新規データベースのレプリケートされたデータベース・オブジェクトに、エクスポート時点でソース・データベースとの一貫性があることを確認してください。
DML変更のみをレプリケートする場合は、表レベルのエクスポート/インポートで十分です。DDL変更もレプリケートする場合は、追加の考慮事項があります。メタデータのエクスポート/インポートを実行する方法の詳細は、「エクスポート/インポートを使用したインスタンス化SCNの設定」を参照してください。
新規データベースで、レプリケートされたデータベース・オブジェクトについてインスタンス化SCNを手動で設定します。新規データベースのレプリケートされたデータベース・オブジェクトに、対応するインスタンス化SCNの時点でソース・データベースとの一貫性があることを確認してください。手順については、「DBMS_APPLY_ADMパッケージを使用したインスタンス化SCNの設定」を参照してください。
新規データベースについて、新規データベースの各宛先データベースでインスタンス化SCNを設定します。これらのインスタンス化SCNの設定は必須であり、新規のソース・データベースで行われた、それに対応するSCNより後にコミットされる変更のみが宛先データベースに適用されます。新規データベースがソース・データベースでない場合は、この手順を実行しないでください。
新規データベースのインスタンス化SCNを設定するには、次の方法があります。
新規データベースでメタデータのみのエクスポートを実行し、そのメタデータを各宛先データベースでインポートします。行がインポートされないことを確認してください。このインポートによって、新規データベースに必須のインスタンス化SCNが、各宛先データベースで設定されます。この場合は、各宛先データベースのレプリケートされたデータベース・オブジェクトに、エクスポート時点で新規データベースとの一貫性があることを確認してください。
DML変更のみをレプリケートする場合は、表レベルのエクスポート/インポートで十分です。DDL変更もレプリケートする場合は、追加の考慮事項があります。メタデータのエクスポート/インポートを実行する方法の詳細は、「エクスポート/インポートを使用したインスタンス化SCNの設定」を参照してください。
宛先データベースで、レプリケートされたデータベース・オブジェクトについてインスタンス化SCNを手動で設定します。各宛先データベースのレプリケートされたデータベース・オブジェクトに、対応するインスタンス化SCNの時点で新規データベースとの一貫性があることを確認してください。手順については、「DBMS_APPLY_ADMパッケージを使用したインスタンス化SCNの設定」を参照してください。
競合が発生する可能性がある場合は、新規データベースで競合解消を構成します。手順については、第9章「Oracle Streamsの競合解消」を参照してください。
DBMS_APPLY_ADM
パッケージのSTART_APPLY
プロシージャを使用して、手順3で新規データベースにおいて作成した適用プロセスを起動します。
前述の項の手順4で他の各宛先データベースに作成した適用プロセスを起動します。新規データベースがソース・データベースでない場合は、この手順を実行しないでください。
新規データベースと共有するデータベース・オブジェクトが新規データベースに存在しない場合は、「既存の複数ソース環境への新規データベースの追加」の手順を完了してから次の手順を実行します。
新規データベースが他のデータベースのソース・データベースである場合は、新規ソース・データベースの各宛先データベースで、新規データベースのインスタンス化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つ選択します。まず、レプリケートされたデータベース・オブジェクトのエクスポートを実行します。次に、レプリケートされたデータベース・オブジェクトのインポートを新規データベースで実行します。エクスポート/インポートの使用方法の詳細は、第8章「インスタンス化とOracle Streamsレプリケーション」および『Oracle Databaseユーティリティ』を参照してください。
ソース・データベースでのデータベース・オブジェクトのエクスポート中、それらのデータベース・オブジェクトに対する変更は許可しないでください。宛先データベースでのデータベース・オブジェクトのインポート中、それらのデータベース・オブジェクトに対する変更は許可しないでください。
FLASHBACK_SCN
やFLASHBACK_TIME
などのエクスポート・パラメータを使用して、より厳密な一貫性レベルを指定できます。
手順2でインスタンス化のためのエクスポートを実行したソース・データベースを除き、新規データベースのソース・データベースごとに、新規データベースでインスタンス化SCNを設定します。これらのインスタンス化SCNの設定は必須であり、ソース・データベースで行われた、そのデータベースの対応するSCNより後にコミットされる変更のみが新規データベースに適用されます。
ソース・データベースごとに、これらのインスタンス化SCNを次のいずれかの方法で設定できます。
ソース・データベースでメタデータのみのエクスポートを実行し、そのメタデータを新規データベースでインポートします。このインポートによって、ソース・データベースに必須のインスタンス化SCNが、新規データベースで設定されます。この場合は、新規データベースのレプリケートされたデータベース・オブジェクトに、エクスポート時点でソース・データベースとの一貫性があることを確認してください。
DML変更のみをレプリケートする場合は、表レベルのエクスポート/インポートで十分です。DDL変更もレプリケートする場合は、追加の考慮事項があります。メタデータのエクスポート/インポートを実行する方法の詳細は、「エクスポート/インポートを使用したインスタンス化SCNの設定」を参照してください。
新規データベースで、レプリケートされたデータベース・オブジェクトについてインスタンス化SCNを手動で設定します。新規データベースのレプリケートされたデータベース・オブジェクトに、対応するインスタンス化SCNの時点でソース・データベースとの一貫性があることを確認してください。手順については、「DBMS_APPLY_ADMパッケージを使用したインスタンス化SCNの設定」を参照してください。
競合が発生する可能性がある場合は、新規データベースで競合解消を構成します。手順については、第9章「Oracle Streamsの競合解消」を参照してください。
DBMS_APPLY_ADM
パッケージのSTART_APPLY
プロシージャを使用して、手順3で新規データベースにおいて作成した適用プロセスを起動します。
前述の項の手順4で他の各宛先データベースに作成した適用プロセスを起動します。新規データベースがソース・データベースでない場合は、この手順を実行しないでください。