ヘッダーをスキップ
Oracle® Streamsレプリケーション管理者ガイド
12cリリース1 (12.1)
B71328-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

7 暗黙的適用の構成

レプリケーション環境では、Oracle Streams適用プロセスが特定のキューから論理変更レコード(LCR)をデキューして、それぞれを直接適用するか、適用ハンドラと呼ばれるユーザー定義プロシージャにパラメータとして渡します。

次のトピックでは、暗黙的適用の構成について説明します。

この章で説明する各タスクは、特に指定がないかぎり、適切な権限を付与された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

  • DBMS_STREAMS_ADM.ADD_MESSAGE_RULE

  • DBMS_APPLY_ADM.CREATE_APPLY

DBMS_STREAMS_ADMパッケージの各プロシージャでは、名前を指定して適用プロセスを作成したり(存在しない場合)、適用プロセスにポジティブ・ルール・セットまたはネガティブ・ルール・セットを作成します(適用プロセスにこれらのルール・セットがない場合)。また、ルール・セットに表ルール、スキーマ・ルール、グローバル・ルールまたはメッセージ・ルールを追加することもできます。

DBMS_APPLY_ADMパッケージのCREATE_APPLYプロシージャでは、適用プロセスは作成しますが、その適用プロセスのルール・セットやルールは作成しません。ただし、CREATE_APPLYプロシージャを使用すると、適用プロセスにポジティブ・ルール・セットまたはネガティブ・ルール・セットとして関連付ける既存のルール・セットを指定したり、適用ハンドラ、適用ユーザー、適用タグなどの他の多数のオプションを指定でき、さらに、バッファ・キューまたは永続キューのいずれからメッセージをデキューするかを指定することもできます。

1つの適用プロセスでは、バッファ・キューまたは永続キューのいずれかからメッセージをデキューする必要があります。取得プロセスによって取得された論理変更レコードは取得LCRと呼ばれ、通常、バッファ・キューに格納されています。したがって、取得プロセスによって取得されたLCRを1つの適用プロセスで適用する場合は、永続LCRまたは永続ユーザー・メッセージは適用できません。

また、同期取得によって取得されたLCRは永続LCRであり、通常、永続キューに格納されています。したがって、同期取得によって取得されたLCRを1つの適用プロセスで適用する場合は、取得プロセスによって取得されたLCRは適用できません。ただし、永続LCRおよび永続ユーザー・メッセージについては、両方のタイプのメッセージが永続キューにステージングされるため、1つの適用プロセスで両方を適用できます。

この章の例では、取得LCR、永続LCRおよび永続ユーザー・メッセージを適用する適用プロセスを作成します。適用プロセスに関連付けるANYDATAキューが存在しない場合は、先にそのキューを作成してから、適用プロセスを作成します。


注意:

  • DBMS_STREAMS_ADMパッケージのプロシージャまたはOracle Enterprise Manager Cloud Controlを使用して、Oracle Streams環境全体(適用プロセスを含む)を構成できます。第2章「Oracle Streamsレプリケーションの簡単な構成」を参照してください。

  • 作成する適用プロセスの構成によっては、適用プロセスで変更を適用する表の列について、ソース・データベースでサプリメンタル・ロギングが必要になる場合があります。「サプリメンタル・ロギングの指定」を参照してください。

  • 取得LCRと永続LCRの詳細は、『Oracle Streams概要および管理』を参照してください。


適用プロセスの作成の準備

適用プロセスを作成する前に、次のタスクを完了する必要があります。

DBMS_STREAMS_ADMを使用した取得LCRの適用プロセスの作成

次の例では、DBMS_STREAMS_ADMパッケージのADD_SCHEMA_RULESプロシージャを実行して、取得論理変更レコード(LCR)を適用する適用プロセスを作成します。この適用プロセスでは、取得プロセスで取得されたLCRを適用できます。

手順は次のとおりです。

  1. 「適用プロセスの作成の準備」で説明されているタスクを完了します。

  2. SQL*Plusで、適用プロセスを実行するデータベースにOracle Streams管理者として接続します。

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

  3. 次のように、適用プロセスを作成します。

    BEGIN
      DBMS_STREAMS_ADM.ADD_SCHEMA_RULES(
        schema_name        => 'hr',
        streams_type       => 'apply',
        streams_name       => 'strm01_apply',
        queue_name         => 'strmadmin.streams_queue',
        include_dml        => TRUE,
        include_ddl        => FALSE,
        include_tagged_lcr => FALSE,
        source_database    => 'dbs1.example.com',
        inclusion_rule     => TRUE);
    END;
    /
    

    このプロシージャを実行すると、次のアクションが実行されます。

    • 取得LCRをローカル・データベースに適用する適用プロセスstrm01_applyが作成されます。この適用プロセスが作成されるのは、それが存在しない場合のみです。

    • 適用プロセスが、既存のキューstrmadmin.streams_queueに関連付けられます。このキューは必ず存在している必要があります。

    • inclusion_ruleパラメータがTRUEに設定されているため、適用プロセスにポジティブ・ルール・セットがない場合は、ポジティブ・ルール・セットが作成され、適用プロセスに関連付けられます。このルール・セットでは、SYS.STREAMS$_EVALUATION_CONTEXT評価コンテキストが使用されます。ルール・セット名は、システムによって生成されます。

    • hrスキーマ内のデータベース・オブジェクトに対するデータ操作言語(DML)変更の結果を含む行LCRに対して、TRUEと評価されるルールが1つ作成されます。ルール名は、システムによって生成されます。

    • inclusion_ruleパラメータがTRUEに設定されているため、このルールが、適用プロセスに関連付けられたポジティブ・ルール・セットに追加されます。

    • 適用プロセスのapply_tagが、'00'(2つのゼロ)と等価の16進値に設定されます。この値がデフォルトの適用タグ値です。適用プロセスで生成されるREDOエントリのタグは、この値になります。

    • include_tagged_lcrパラメータがFALSEに設定されているため、NULLタグがある場合にのみ適用プロセスで行LCRを適用するように設定されます。この動作は、適用プロセスのシステム作成ルールを介して実行されます。

    • 適用プロセスでdbs1.example.comソース・データベースからのLCRを適用するように指定されます。適用プロセスでデキューされるLCRは、適用プロセスのルール・セット内のルールによって決定されます。適用プロセスでdbs1.example.com以外のソース・データベースからのLCRがデキューされた場合、エラーが発生します。

DBMS_APPLY_ADMを使用した適用プロセスの作成

この項では、DBMS_APPLY_ADMパッケージを使用して適用プロセスを作成する次の例を取り上げます。


関連項目:

  • apply_database_linkパラメータを使用してOracle以外のデータベースにメッセージを適用するように適用プロセスを構成する方法の詳細は、「OracleからOracle以外への環境での変更の適用」を参照してください。

  • 『Oracle Streams概要および管理』


DBMS_APPLY_ADMを使用した取得LCRの適用プロセスの作成

次の例では、DBMS_APPLY_ADMパッケージのCREATE_APPLYプロシージャを実行して、取得論理変更レコード(LCR)を適用する適用プロセスを作成します。この適用プロセスでは、取得プロセスで取得されたLCRを適用できます。

手順は次のとおりです。

  1. 「適用プロセスの作成の準備」で説明されているタスクを完了します。

  2. SQL*Plusで、適用プロセスを実行するデータベースにOracle Streams管理者として接続します。

    Oracle Streams管理者にDBAロールが付与されていることを確認します。この例では、適用ユーザーをOracle Streams管理者以外のユーザーに設定するため、DBAロールが必要です。

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

  3. 適用プロセスで使用されるルール・セットを作成します(存在しない場合)。この例では、ルール・セットがstrmadmin.strm02_rule_setであると想定します。オプションで、ルール・セットにルールを追加することもできます。手順については、『Oracle Streams概要および管理』を参照してください。

  4. 適用プロセスで使用される適用ハンドラを作成します(存在しない場合)。この例では、DDLハンドラがstrmadmin.history_ddlプロシージャであると想定します。『Oracle Streams概要および管理』の例でこのプロシージャを作成しています。

  5. 次のように、適用プロセスを作成します。

    BEGIN
      DBMS_APPLY_ADM.CREATE_APPLY(
        queue_name             => 'strmadmin.streams_queue',
        apply_name             => 'strm02_apply',
        rule_set_name          => 'strmadmin.strm02_rule_set',
        message_handler        => NULL,     
        ddl_handler            => 'strmadmin.history_ddl',
        apply_user             => 'hr',
        apply_database_link    => NULL,
        apply_tag              => HEXTORAW('5'),
        apply_captured         => TRUE,
        precommit_handler      => NULL,
        negative_rule_set_name => NULL,
        source_database        => 'dbs1.example.com');
    END;
    /
    

    このプロシージャを実行すると、次のアクションが実行されます。

    • 適用プロセスstrm02_applyが作成されます。同じ名前の適用プロセスは存在できません。

    • 適用プロセスが、キューstrmadmin.streams_queueに関連付けられます。このキューは必ず存在している必要があります。

    • 適用プロセスが、ルール・セットstrmadmin.strm02_rule_setに関連付けられます。このルール・セットは必ず存在している必要があります。このルール・セットは、適用プロセスのポジティブ・ルール・セットです。

    • メッセージ・ハンドラが適用プロセスで使用されないように指定されます。

    • DDLハンドラがstrmadminスキーマ内のhistory_ddl PL/SQLプロシージャとなるように指定されます。このプロシージャが存在し、CREATE_APPLYプロシージャを実行するユーザーにhistory_ddl PL/SQLプロシージャに対するEXECUTE権限が付与されている必要があります。

    • 変更を適用するユーザーがhrであり、CREATE_APPLYプロシージャを実行するユーザー(Oracle Streams管理者)とならないように指定されます。

    • apply_database_linkパラメータがNULLに設定されているため、適用プロセスによってローカル・データベースに変更が適用されるように指定されます。

    • 適用プロセスによって生成される各REDOエントリのタグが'5'と等価の16進値になるように指定されます。タグの詳細は、第10章「Oracle Streamsタグ」を参照してください。

    • 適用プロセスで永続LCRや永続ユーザー・メッセージではなく取得LCRを適用するように指定されます。したがって、取得プロセスではなく同期取得やユーザー・アプリケーションによってLCRが構成され、そのLCRが適用プロセスのキューにステージングされている場合、この適用プロセスではLCRはデキューされません。

    • プリコミット・ハンドラが適用プロセスで使用されないように指定されます。

    • ネガティブ・ルール・セットが適用プロセスで使用されないように指定されます。

    • 適用プロセスでdbs1.example.comソース・データベースからのLCRを適用するように指定されます。適用プロセスでデキューされるLCRは、適用プロセスのルール・セット内のルールによって決定されます。適用プロセスでdbs1.example.com以外のソース・データベースからのLCRがデキューされた場合、エラーが発生します。

適用プロセスを作成した後、ADD_TABLE_RULESまたはADD_SUBSET_RULESプロシージャを実行して、適用プロセスのルール・セットにルールを追加します。これらのルールによって、適用プロセスは、指定された表のLCRを適用するように指示されます。


関連項目:

ルールの詳細は、『Oracle Streams概要および管理』を参照してください。

DBMS_APPLY_ADMを使用した永続LCRの適用プロセスの作成

次の例では、DBMS_APPLY_ADMパッケージのCREATE_APPLYプロシージャを実行して、永続論理変更レコード(LCR)を適用する適用プロセスを作成します。この適用プロセスでは、同期取得によって取得されたLCRやアプリケーションによって構成されたLCRを適用できます。

手順は次のとおりです。

  1. 「適用プロセスの作成の準備」で説明されているタスクを完了します。

  2. SQL*Plusで、適用プロセスを実行するデータベースにOracle Streams管理者として接続します。

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

  3. 適用プロセスで使用されるルール・セットを作成します(存在しない場合)。この例では、ルール・セットがstrmadmin.strm03_rule_setであると想定します。オプションで、ルール・セットにルールを追加することもできます。手順については、『Oracle Streams概要および管理』を参照してください。

  4. 適用プロセスで使用される適用ハンドラを作成します(存在しない場合)。この例で作成される適用プロセスでは、適用ハンドラは使用されません。

  5. 次のように、適用プロセスを作成します。

    BEGIN
      DBMS_APPLY_ADM.CREATE_APPLY(
        queue_name             => 'strmadmin.streams_queue',
        apply_name             => 'strm03_apply',
        rule_set_name          => 'strmadmin.strm03_rule_set',
        message_handler        => NULL,
        ddl_handler            => NULL,
        apply_user             => NULL,
        apply_database_link    => NULL,
        apply_tag              => NULL,
        apply_captured         => FALSE,
        precommit_handler      => NULL,
        negative_rule_set_name => NULL);
    END;
    /
    

    このプロシージャを実行すると、次のアクションが実行されます。

    • 適用プロセスstrm03_applyが作成されます。同じ名前の適用プロセスは存在できません。

    • 適用プロセスが、キューstrmadmin.streams_queueに関連付けられます。このキューは必ず存在している必要があります。

    • 適用プロセスが、ルール・セットstrmadmin.strm03_rule_setに関連付けられます。このルール・セットは必ず存在している必要があります。このルール・セットは、適用プロセスのポジティブ・ルール・セットです。

    • メッセージ・ハンドラが適用プロセスで使用されないように指定されます。

    • DDLハンドラが適用プロセスで使用されないように指定されます。

    • apply_userパラメータがNULLであるため、変更を適用するユーザーがCREATE_APPLYプロシージャを実行するユーザーになるように指定されます。

    • apply_database_linkパラメータがNULLに設定されているため、適用プロセスによってローカル・データベースに変更が適用されるように指定されます。

    • 適用プロセスで生成される各REDOエントリのタグがNULLになるように指定されます。タグの詳細は、第10章「Oracle Streamsタグ」を参照してください。

    • 取得LCRが適用プロセスで適用されないように指定されます。したがって、適用プロセスで、適用プロセス・キューの永続キュー部分に含まれている永続LCRまたは永続ユーザー・メッセージを適用できます。

    • プリコミット・ハンドラが適用プロセスで使用されないように指定されます。

    • ネガティブ・ルール・セットが適用プロセスで使用されないように指定されます。

適用プロセスを作成した後、ADD_TABLE_RULESまたはADD_SUBSET_RULESプロシージャを実行して、適用プロセスのルール・セットにルールを追加します。これらのルールによって、適用プロセスは、指定された表のLCRを適用するように指示されます。


関連項目:

ルールの詳細は、『Oracle Streams概要および管理』を参照してください。