16 ステージングと伝播の管理
次の各項では、ANYDATAキューと伝播の管理について説明します。
この章で説明する各タスクは、特に明記されていないかぎり、適切な権限を付与されているOracle Streams管理者が完了する必要があります。
関連項目:
-
Oracle Streams管理者を作成する方法の詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照
16.1 キューの管理
ANYDATA
キューでは、ペイロードがANYDATA
型であるメッセージがステージングされます。したがって、ANYDATA
キューでは、ペイロードがANYDATA
ラッパーにラップされていれば、ほぼすべての型のペイロードのメッセージをステージングできます。Oracle Streamsの各取得プロセス、適用プロセスおよびメッセージ・クライアントは1つのANYDATA
キューに関連付けられ、Oracle Streamsの各伝播は1つのANYDATA
ソース・キューと1つのANYDATA
宛先キューに関連付けられます。
この項では、キューに関連する次のタスクの実行手順を説明します。
16.1.1 保護キューでのユーザー操作の有効化
ユーザーが保護キューでエンキューやデキューなどのキュー操作を実行できるようにするには、そのユーザーをキューの保護キュー・ユーザーとして構成する必要があります。DBMS_STREAMS_ADM
パッケージのSET_UP_QUEUE
プロシージャを使用して保護キューを作成すると、キュー所有者とqueue_user
パラメータで指定したユーザーは自動的にキューの保護ユーザーとして構成されます。他のユーザーに対してキュー操作の実行を許可する場合は、そのユーザーを次のいずれかの方法で構成できます。
-
SET_UP_QUEUE
を実行してqueue_user
を指定します。キューが存在する場合、キューの作成はスキップされますが、新規キュー・ユーザーを指定した場合はそのユーザーが構成されます。 -
ユーザーをOracle Databaseアドバンスト・キューイング(AQ)・エージェントに手動で関連付けます。
次の例に、ユーザーをOracle Streams AQエージェントに手動で関連付ける手順を示します。streams_queue
という名前のキューに対して、oe
ユーザーがキュー操作を実行できるようにするとします。次の手順に従って、oe
ユーザーをstreams_queue
の保護キュー・ユーザーとして構成します。
前述の手順を完了すると、oe
ユーザーはstreams_queue
の保護ユーザーとなり、このキューを操作できます。ただし、ユーザーにはエンキュー権限やデキュー権限など、キュー操作を実行するための特定の権限を付与する必要もあります。
関連項目:
-
「保護キュー」
-
Oracle Streams AQエージェントと
DBMS_AQADM
パッケージの使用方法の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照
16.1.2 保護キューでのユーザー操作の無効化
-
取得プロセスまたは同期取得を削除したが、取得プロセスまたは同期取得で使用されていたキューを削除しておらず、取得ユーザーであったユーザーに対して残りの保護キューの操作を禁止する場合。
-
適用プロセスを削除したが、適用プロセスで使用されていたキューを削除しておらず、適用ユーザーであったユーザーには残りの保護キューの操作を禁止する場合。
-
DBMS_APPLY_ADM
パッケージのALTER_APPLY
プロシージャを使用して適用プロセスのapply_user
を変更しており、変更前のapply_user
には適用プロセスのキューの操作を禁止する場合。 -
「保護キューでのユーザー操作の有効化」で説明した手順に従って、ユーザーに保護キューの操作を許可したが、この後、このユーザーには保護キューのキュー操作を禁止する場合。
保護キュー・ユーザーを無効化するには、キューに対するENQUEUE
およびDEQUEUE
権限をユーザーから取り消す方法と、DBMS_AQADM
パッケージのDISABLE_DB_ACCESS
プロシージャを実行する方法があります。たとえば、oe
ユーザーに対して、streams_queue
という名前のキューのキュー操作を禁止するとします。
注意:
複数の保護キューにOracle Streams AQエージェントを使用している場合は、そのエージェントに対してDISABLE_DB_ACCESS
を実行すると、そのエージェントに関連付けられているユーザーがこれらすべてのキューに対する操作を実行できなくなります。
関連項目:
-
「保護キュー」
-
Oracle Streams AQエージェントと
DBMS_AQADM
パッケージの使用方法の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照
16.1.3 キューの削除
既存のANYDATA
キューを削除するには、DBMS_STREAMS_ADM
パッケージのREMOVE_QUEUE
プロシージャを使用します。REMOVE_QUEUE
プロシージャを実行すると、キューにある既存のメッセージがコンシュームされるまでプロシージャは待機します。その後、プロシージャによってキューが停止され、キューに対するエンキューまたはデキューが禁止されます。停止したキューは、プロシージャによって削除されます。
キューのキュー表が空で他のキューに使用されていない場合、キュー表も削除できます。キュー表を削除するには、drop_unused_queue_table
パラメータにTRUE
(デフォルト)を指定します。
また、cascade
パラメータをTRUE
に設定すると、そのキューを使用するすべてのOracle Streamsクライアントを削除できます。デフォルトでは、cascade
パラメータはFALSE
に設定されています。
たとえば、strmadmin
スキーマ内のANYDATA
キューstreams_queue
を削除して、そのキューの空のキュー表を削除するには、次のプロシージャを実行します。
BEGIN DBMS_STREAMS_ADM.REMOVE_QUEUE( queue_name => 'strmadmin.streams_queue', cascade => FALSE, drop_unused_queue_table => TRUE); END; /
この例ではcascade
パラメータがFALSE
に設定されているため、Oracle Streamsクライアントがstreams_queue
を使用していない場合のみ、このプロシージャはそのキューを削除します。cascade
パラメータがFALSE
に設定されており、Oracle Streamsクライアントがそのキューを使用している場合は、エラーが発生します。
16.2 Oracle Streamsの伝播および伝播ジョブの管理
伝播では、Oracle Streamsのソース・キューから宛先キューにメッセージが伝播されます。この項では、次のタスクの実行手順を説明します。
また、Oracle Streamsの伝播は、Oracle Databaseアドバンスト・キューイング(AQ)の機能を使用して管理することもできます。
関連項目:
-
Oracle Enterprise Manager Cloud Controlを使用して伝播を管理する手順については、Oracle Enterprise Manager Cloud Controlのオンライン・ヘルプを参照
-
Oracle Streams AQの機能を使用した伝播の管理の詳細は、『Oracle Databaseアドバンスト・キューイング・ユーザーズ・ガイド』を参照
16.2.1 伝播の開始
既存の伝播を開始するには、DBMS_PROPAGATION_ADM
パッケージのSTART_PROPAGATION
プロシージャを実行します。たとえば、次のプロシージャでは、伝播strm01_propagation
が開始されます。
BEGIN DBMS_PROPAGATION_ADM.START_PROPAGATION( propagation_name => 'strm01_propagation'); END; /
16.2.2 伝播の停止
既存の伝播を停止するには、DBMS_PROPAGATION_ADM
パッケージのSTOP_PROPAGATION
プロシージャを実行します。たとえば、次のプロシージャでは、伝播strm01_propagation
が停止されます。
BEGIN DBMS_PROPAGATION_ADM.STOP_PROPAGATION( propagation_name => 'strm01_propagation', force => FALSE); END; /
伝播の停止時に統計を消去するには、force
パラメータをTRUE
に設定します。伝播に問題が発生した場合は、force
パラメータをTRUE
に設定して伝播を停止してから伝播を再開始すると、問題を解決できることがあります。force
パラメータがFALSE
に設定されている場合は、伝播の統計は消去されません。
16.2.3 伝播ジョブのスケジュールの変更
既存の伝播ジョブのスケジュールを変更するには、DBMS_AQADM
パッケージのALTER_PROPAGATION_SCHEDULE
プロシージャを使用します。次の各項では、キュー・ツー・キュー伝播およびキュー・ツーdblink伝播の伝播ジョブのスケジュールを変更する例を説明します。これらの例では、メッセージを15分(900秒)ごとに300秒間伝播させ、25秒待機してから、完全に伝播されたキューの新しいメッセージが伝播されるように、伝播ジョブを設定します。
この項には、次の項目が含まれます。
関連項目:
-
ALTER_PROPAGATION_SCHEDULE
プロシージャの使用の詳細は、『Oracle Databaseアドバンスト・キューイング・ユーザーズ・ガイド』を参照 -
「伝播ジョブ」
16.2.3.1 キュー・ツー・キュー伝播の伝播ジョブのスケジュール変更
dbs2.example.com
データベース・リンクを使用してstrmadmin.strm_a_queue
ソース・キューからstrmadmin.strm_b_queue
宛先キューにメッセージを伝播するキュー・ツー・キュー伝播の伝播ジョブのスケジュールを変更するには、次のプロシージャを実行します。
BEGIN DBMS_AQADM.ALTER_PROPAGATION_SCHEDULE( queue_name => 'strmadmin.strm_a_queue', destination => 'dbs2.example.com', duration => 300, next_time => 'SYSDATE + 900/86400', latency => 25, destination_queue => 'strmadmin.strm_b_queue'); END; /
各キュー・ツー・キュー伝播には独自の伝播ジョブがあるため、このプロシージャでは、指定した2つのキュー間でメッセージが伝播される伝播のスケジュールのみを変更できます。キュー・ツー・キュー伝播の伝播スケジュールを変更するには、destination_queue
パラメータで宛先キューの名前を指定する必要があります。
16.2.3.2 キュー・ツーdblink伝播の伝播ジョブのスケジュール変更
dbs3.example.com
データベース・リンクを使用してstrmadmin.streams_queue
ソース・キューからメッセージを伝播するキュー・ツーdblink伝播の伝播ジョブのスケジュールを変更するには、次のプロシージャを実行します。
BEGIN DBMS_AQADM.ALTER_PROPAGATION_SCHEDULE( queue_name => 'strmadmin.streams_queue', destination => 'dbs3.example.com', duration => 300, next_time => 'SYSDATE + 900/86400', latency => 25); END; /
伝播がキュー・ツーdblink伝播であるため、destination_queue
パラメータは指定されていません。このタスクは、dbs3.example.com
データベース・リンクを使用するすべての宛先キューに対してソース・キューからメッセージを伝播するすべてのキュー・ツーdblink伝播に影響します。
16.2.4 伝播のルール・セットの指定
伝播には、1つのポジティブ・ルール・セットおよび1つのネガティブ・ルール・セットを指定できます。伝播では、ポジティブ・ルール・セット内の1つ以上のルールがTRUE
と評価される場合にメッセージは伝播され、ネガティブ・ルール・セット内の1つ以上のルールがTRUE
と評価される場合は変更が破棄されます。ネガティブ・ルール・セットは、ポジティブ・ルール・セットの前に評価されます。
この項には、次の項目が含まれます。
16.2.4.1 伝播のポジティブ・ルール・セットの指定
既存のルール・セットを既存の伝播のポジティブ・ルール・セットとして指定するには、ALTER_PROPAGATION
プロシージャのrule_set_name
パラメータを使用します。このプロシージャはDBMS_PROPAGATION_ADM
パッケージに含まれています。
たとえば、次のプロシージャでは伝播strm01_propagation
のポジティブ・ルール・セットがstrm02_rule_set
に設定されます。
BEGIN DBMS_PROPAGATION_ADM.ALTER_PROPAGATION( propagation_name => 'strm01_propagation', rule_set_name => 'strmadmin.strm02_rule_set'); END; /
16.2.4.2 伝播のネガティブ・ルール・セットの指定
既存のルール・セットを既存の伝播のネガティブ・ルール・セットとして指定するには、ALTER_PROPAGATION
プロシージャのnegative_rule_set_name
パラメータを使用します。このプロシージャはDBMS_PROPAGATION_ADM
パッケージに含まれています。
たとえば、次のプロシージャでは伝播strm01_propagation
のネガティブ・ルール・セットがstrm03_rule_set
に設定されます。
BEGIN DBMS_PROPAGATION_ADM.ALTER_PROPAGATION( propagation_name => 'strm01_propagation', negative_rule_set_name => 'strmadmin.strm03_rule_set'); END; /
16.2.5 伝播のルール・セットへのルールの追加
伝播のルール・セットにルールを追加するには、次のいずれかのプロシージャを実行します。
ADD_SUBSET_PROPAGATION_RULES
プロシージャ以外のこれらのプロシージャでは、伝播のポジティブ・ルール・セットまたはネガティブ・ルール・セットにルールを追加できます。ADD_SUBSET_PROPAGATION_RULES
プロシージャでは、伝播のポジティブ・ルール・セットのみにルールを追加できます。
この項には、次の項目が含まれます。
関連項目:
16.2.5.1 伝播のポジティブ・ルール・セットへのルールの追加
次の例では、DBMS_STREAMS_ADM
パッケージのADD_TABLE_PROPAGATION_RULES
プロシージャを実行して、既存の伝播strm01_propagation
のポジティブ・ルール・セットにルールを追加します。
BEGIN DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES( table_name => 'hr.locations', streams_name => 'strm01_propagation', source_queue_name => 'strmadmin.strm_a_queue', destination_queue_name => 'strmadmin.strm_b_queue@dbs2.example.com', include_dml => TRUE, include_ddl => TRUE, source_database => 'dbs1.example.com', inclusion_rule => TRUE); END; /
このプロシージャを実行すると、次のアクションが実行されます。
-
2つのルールが作成されます。一方のルールは、
hr.locations
表に対するDML変更の結果を含む行LCRについてTRUE
と評価されます。他方のルールは、hr.locations
表に対するDDL変更を含むDDL LCRについてTRUE
と評価されます。ルール名は、システムによって生成されます。 -
どちらのルールも、
dbs1.example.com
ソース・データベースで変更が発生したLCRに対してのみTRUE
と評価されるように指定されます。 -
inclusion_rule
パラメータがTRUE
に設定されているため、これらの2つのルールは、伝播に関連付けられたポジティブ・ルール・セットに追加されます。
16.2.5.2 伝播のネガティブ・ルール・セットへのルールの追加
次の例では、DBMS_STREAMS_ADM
パッケージのADD_TABLE_PROPAGATION_RULES
プロシージャを実行して、既存の伝播strm01_propagation
のネガティブ・ルール・セットにルールを追加します。
BEGIN DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES( table_name => 'hr.departments', streams_name => 'strm01_propagation', source_queue_name => 'strmadmin.strm_a_queue', destination_queue_name => 'strmadmin.strm_b_queue@dbs2.example.com', include_dml => TRUE, include_ddl => TRUE, source_database => 'dbs1.example.com', inclusion_rule => FALSE); END; /
このプロシージャを実行すると、次のアクションが実行されます。
-
2つのルールが作成されます。一方のルールは
hr.departments
表に対するDML変更の結果を含む行LCRについてTRUE
と評価され、他方のルールは、hr.departments
表に対するDDL変更を含むDDL LCRについてTRUE
と評価されます。ルール名は、システムによって生成されます。 -
どちらのルールも、
dbs1.example.com
ソース・データベースで変更が発生したLCRに対してのみTRUE
と評価されるように指定されます。 -
inclusion_rule
パラメータがFALSE
に設定されているため、これらの2つのルールは、伝播に関連付けられたネガティブ・ルール・セットに追加されます。
16.2.6 伝播のルール・セットからのルールの削除
DBMS_STREAMS_ADM
パッケージのREMOVE_RULE
プロシージャを実行すると、既存の伝播のルール・セットからルールを削除できます。たとえば、次のプロシージャでは、伝播strm01_propagation
のポジティブ・ルール・セットからルールdepartments3
が削除されます。
BEGIN DBMS_STREAMS_ADM.REMOVE_RULE( rule_name => 'departments3', streams_type => 'propagation', streams_name => 'strm01_propagation', drop_unused_rule => TRUE, inclusion_rule => TRUE); END; /
この例では、REMOVE_RULE
プロシージャのdrop_unused_rule
パラメータがTRUE
に設定されています。これはデフォルトの設定です。したがって、削除するルールが他のどのルール・セットにも含まれていなければ、そのルールはデータベースから削除されます。drop_unused_rule
パラメータがFALSE
に設定されている場合、ルールはルール・セットから削除されますが、他のどのルール・セットにも含まれていない場合でも、データベースからは削除されません。
inclusion_rule
パラメータがFALSE
に設定されている場合、REMOVE_RULE
プロシージャによって、伝播のポジティブ・ルール・セットからではなく、ネガティブ・ルール・セットからルールが削除されます。
伝播のルール・セットからすべてのルールを削除するには、REMOVE_RULE
プロシージャの実行時にrule_name
パラメータにNULL
を指定します。
16.2.7 伝播のルール・セットの削除
伝播からルール・セットを削除するには、DBMS_PROPAGATION_ADM
パッケージのALTER_PROPAGATION
プロシージャを使用します。このプロシージャでは、ポジティブ・ルール・セットまたはネガティブ・ルール・セット、あるいはその両方を削除できます。伝播のポジティブ・ルール・セットを削除するには、remove_rule_set
パラメータをTRUE
に指定します。伝播のネガティブ・ルール・セットを削除するには、remove_negative_rule_set
パラメータをTRUE
に指定します。
たとえば、次のプロシージャでは、伝播strm01_propagation
からポジティブ・ルール・セットとネガティブ・ルール・セットの両方が削除されます。
BEGIN DBMS_PROPAGATION_ADM.ALTER_PROPAGATION( propagation_name => 'strm01_propagation', remove_rule_set => TRUE, remove_negative_rule_set => TRUE); END; /
16.2.8 伝播の削除
既存の伝播を削除するには、DBMS_PROPAGATION_ADM
パッケージのDROP_PROPAGATION
プロシージャを実行します。たとえば、次のプロシージャでは、伝播strm01_propagation
が削除されます。
BEGIN DBMS_PROPAGATION_ADM.DROP_PROPAGATION( propagation_name => 'strm01_propagation', drop_unused_rule_sets => TRUE); END; /
drop_unused_rule_sets
パラメータがTRUE
に設定されているため、このプロシージャでは伝播strm01_propagation
で使用されているすべてのルール・セットも削除されます。ただし、他のOracle Streamsクライアントで使用されているルール・セットは削除されません。drop_unused_rule_sets
パラメータがTRUE
に設定されている場合、伝播のポジティブ・ルール・セットとネガティブ・ルール・セットが両方とも削除されます。このプロシージャによってルール・セットが削除された場合、そのルール・セット内のルールのうち、他のルール・セットに含まれていないルールも削除されます。
注意:
伝播を削除すると、その伝播が使用していた伝播ジョブは、他の伝播で使用されていないかぎり自動的に削除されます。