レプリケーション環境では、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
キューが存在しない場合は、先にそのキューを作成してから、適用プロセスを作成します。
注意:
|
適用プロセスを作成する前に、次のタスクを完了する必要があります。
「Oracle Streamsレプリケーションを構成する前に実行するタスク」で説明されている次のタスクを完了します。
適用プロセスに関連付けるANYDATA
キューを作成します(存在しない場合)。手順については、「ANYDATAキューの作成」を参照してください。この章の例では、適用プロセスで使用されるキューはstrmadmin.streams_queue
であると想定しています。適用プロセスを実行するデータベースと同じデータベースでキューを作成します。
次の例では、DBMS_STREAMS_ADM
パッケージのADD_SCHEMA_RULES
プロシージャを実行して、取得論理変更レコード(LCR)を適用する適用プロセスを作成します。この適用プロセスでは、取得プロセスで取得されたLCRを適用できます。
手順は次のとおりです。
「適用プロセスの作成の準備」で説明されているタスクを完了します。
SQL*Plusで、適用プロセスを実行するデータベースにOracle Streams管理者として接続します。
SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。
次のように、適用プロセスを作成します。
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
パッケージのCREATE_APPLY
プロシージャを実行して、取得論理変更レコード(LCR)を適用する適用プロセスを作成します。この適用プロセスでは、取得プロセスで取得されたLCRを適用できます。
手順は次のとおりです。
「適用プロセスの作成の準備」で説明されているタスクを完了します。
SQL*Plusで、適用プロセスを実行するデータベースにOracle Streams管理者として接続します。
Oracle Streams管理者にDBA
ロールが付与されていることを確認します。この例では、適用ユーザーをOracle Streams管理者以外のユーザーに設定するため、DBA
ロールが必要です。
SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。
適用プロセスで使用されるルール・セットを作成します(存在しない場合)。この例では、ルール・セットがstrmadmin.strm02_rule_set
であると想定します。オプションで、ルール・セットにルールを追加することもできます。手順については、『Oracle Streams概要および管理』を参照してください。
適用プロセスで使用される適用ハンドラを作成します(存在しない場合)。この例では、DDLハンドラがstrmadmin.history_ddl
プロシージャであると想定します。『Oracle Streams概要および管理』の例でこのプロシージャを作成しています。
次のように、適用プロセスを作成します。
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
パッケージのCREATE_APPLY
プロシージャを実行して、永続論理変更レコード(LCR)を適用する適用プロセスを作成します。この適用プロセスでは、同期取得によって取得されたLCRやアプリケーションによって構成されたLCRを適用できます。
手順は次のとおりです。
「適用プロセスの作成の準備」で説明されているタスクを完了します。
SQL*Plusで、適用プロセスを実行するデータベースにOracle Streams管理者として接続します。
SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。
適用プロセスで使用されるルール・セットを作成します(存在しない場合)。この例では、ルール・セットがstrmadmin.strm03_rule_set
であると想定します。オプションで、ルール・セットにルールを追加することもできます。手順については、『Oracle Streams概要および管理』を参照してください。
適用プロセスで使用される適用ハンドラを作成します(存在しない場合)。この例で作成される適用プロセスでは、適用ハンドラは使用されません。
次のように、適用プロセスを作成します。
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概要および管理』を参照してください。 |