次の各項では、キュー、伝播およびメッセージ環境の構成について説明しています。
この章で説明する各タスクは、特に明記されていないかぎり、適切な権限を付与されているOracle Streams管理者が完了する必要があります。
Oracle Streams環境では、キューによってメッセージが格納されます。メッセージはエンキューされ、キュー間で伝播された後、デキューされます。
この項では、キューに関連する次のタスクの実行手順を説明します。
|
注意: DBMS_STREAMS_ADMパッケージまたはOracle Enterprise Manager内のプロシージャを使用すると、キューを含むOracle Streams環境全体を構成できます。 |
ANYDATAキューには、ペイロードの型がANYDATAのメッセージが格納されます。したがって、ペイロードがANYDATAラッパーでラップされている場合は、ANYDATAキューでほぼすべての型のペイロードのメッセージを格納できます。Oracle Streamsの各取得プロセス、適用プロセスおよびメッセージ・クライアントには1つのANYDATAキューが関連付けられ、Oracle Streamsの各伝播には1つのANYDATAソース・キューと1つのANYDATA宛先キューが関連付けられます。
最も簡単なANYDATAキューの作成方法は、DBMS_STREAMS_ADMパッケージのSET_UP_QUEUEプロシージャを使用する方法です。このプロシージャを使用すると、作成するANYDATAキューに次の設定を指定できます。
キュー表のSTORAGE句
キュー名
キューの保護キュー・ユーザーとして構成され、キューに対するENQUEUEおよびDEQUEUE権限が付与されるキュー・ユーザー
キューに関するコメント
指定したキュー表が存在しない場合は作成されます。指定したキュー表が存在する場合は、既存のキュー表が新しいキューで使用されます。キューを作成するときにキュー表を指定しないと、デフォルトでstreams_queue_tableが指定されます。
1つのプロシージャ(DBMS_STREAMS_ADMパッケージのSET_UP_QUEUEプロシージャ)を使用して、ANYDATAキューおよびこのキューで使用されるキュー表を作成できます。SET_UP_QUEUEプロシージャを使用して新しいキュー表を作成する場合は、指定したキュー表が存在していない必要があります。
たとえば、SET_UP_QUEUEプロシージャを使用してANYDATAキューを作成するには、次のプロシージャを実行します。
BEGIN
DBMS_STREAMS_ADM.SET_UP_QUEUE(
queue_table => 'strmadmin.streams_queue_table',
queue_name => 'strmadmin.streams_queue',
queue_user => 'hr');
END;
/
このプロシージャを実行すると、次のアクションが実行されます。
streams_queue_tableという名前のキュー表が作成されます。このキュー表は、存在していない場合にのみ作成されます。このキュー表に基づくキューには、ANYDATA型のメッセージが格納されます。キュー表の名前の最大バイト数は24バイトです。
streams_queueという名前のキューが作成されます。このキューは、存在していない場合にのみ作成されます。キューの名前の最大バイト数は24バイトです。
streams_queueキューがstrmadmin.streams_queue_tableキュー表に基づくように指定されます。
このキューの保護キュー・ユーザーとしてhrユーザーが構成され、このキューに対するENQUEUE権限およびDEQUEUE権限がこのユーザー付与されます。
キューが起動されます。
SET_UP_QUEUEプロシージャで明確に設定されていないパラメータに対しては、デフォルト設定が使用されます。
SET_UP_QUEUEプロシージャによってキュー表が作成される場合は、次のDBMS_AQADM.CREATE_QUEUE_TABLEパラメータ設定が指定されます。
Oracle Database 10gリリース2以上のデータベースの場合は、sort_listの設定がcommit_timeになります。Oracle Database 10gリリース2より前のデータベースの場合は、sort_listの設定がenq_timeになります。
multiple_consumersの設定がTRUEになります。
message_groupingの設定がtransactionalになります。
secureの設定がTRUEになります。
CREATE_QUEUE_TABLEプロシージャのその他のパラメータは、デフォルト値に設定されます。
DBMS_AQADMパッケージのCREATE_QUEUE_TABLEプロシージャを使用すると、DBMS_STREAMS_ADMパッケージのSET_UP_QUEUEプロシージャによって指定されたデフォルトのプロパティとは異なるプロパティを持つANYDATAタイプのキュー表を作成できます。CREATE_QUEUE_TABLEプロシージャを使用してキュー表を作成した後、このキュー表を使用するキューを作成できます。これを行うには、SET_UP_QUEUEプロシージャのqueue_tableパラメータにキュー表を指定します。
同様に、SET_UP_QUEUEのかわりにDBMS_AQADMパッケージのCREATE_QUEUEプロシージャを使用して、キューを作成できます。CREATE_QUEUEは、キューに対してカスタム設定を行う必要がある場合に使用します。たとえば、再試行遅延時間または保持時間をカスタム設定で指定するには、CREATE_QUEUEを使用します。CREATE_QUEUEを使用する場合は、手動でキューを起動する必要があります。
|
注意: メッセージをデキューできるサブスクライバが構成されるまでは、メッセージをエンキューすることはできません。 |
|
関連項目:
|
伝播によって、Oracle Streamsソース・キューからOracle Streams宛先キューにメッセージが送信されます。また、Oracle Streamsの伝播は、Oracle Streamsアドバンスト・キューイング(AQ)の機能を使用して管理できます。
次のいずれかのプロシージャを使用すると、2つのANYDATAキュー間の伝播を作成できます。
DBMS_STREAMS_ADM.ADD_SUBSET_PROPAGATION_RULES
DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES
DBMS_STREAMS_ADM.ADD_SCHEMA_PROPAGATION_RULES
DBMS_STREAMS_ADM.ADD_GLOBAL_PROPAGATION_RULES
DBMS_PROPAGATION_ADM.CREATE_PROPAGATION
DBMS_STREAMS_ADMパッケージ内のこれらのプロシージャのいずれかによって、指定した名前の伝播が存在しない場合は作成され、伝播にポジティブ・ルール・セットまたはネガティブ・ルール・セットのいずれも存在しない場合はそのいずれかのルール・セットが作成されます。また、ルール・セットに表ルール、スキーマ・ルールまたはグローバル・ルールを追加することもできます。CREATE_PROPAGATIONプロシージャでは、伝播は作成されますが、伝播に対してルール・セットまたはルールを作成されません。ただし、CREATE_PROPAGATIONプロシージャを使用すると、既存のルール・セットを指定してポジティブ・ルール・セットまたはネガティブ・ルール・セットのいずれかとして伝播に関連付けることができます。すべての伝播は、作成後、自動的に開始されます。
伝播を作成する前に、次のタスクを完了する必要があります。
伝播用のソース・キューおよび宛先キューが存在しない場合は、作成します。タスクを完了するためには、両方のキューがANYDATAキューである必要があります。
方法については、「ANYDATAキューの作成」を参照してください。
ソース・キューを含むデータベースと宛先キューを含むデータベース間で、データベース・リンクを作成します。
詳細は、「Oracle Streams管理者の構成」を参照してください。
この項の内容は次のとおりです。
|
注意: DBMS_STREAMS_ADMパッケージまたはOracle Enterprise Manager内のプロシージャを使用すると、伝播を含むOracle Streams環境全体を構成できます。 |
|
関連項目:
|
次の例では、DBMS_STREAMS_ADMパッケージのADD_TABLE_PROPAGATION_RULESプロシージャを実行して、伝播を作成します。
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,
include_tagged_lcr => FALSE,
source_database => 'dbs1.example.com',
inclusion_rule => TRUE,
queue_to_queue => TRUE);
END;
/
このプロシージャを実行すると、次のアクションが実行されます。
strm01_propagationという名前の伝播が作成されます。この伝播は、存在していない場合にのみ作成されます。
この伝播によって現行のデータベース内のstrm_a_queueからdbs2.example.comデータベース内のstrm_b_queueにLCRを伝播するように指定されます。
LCRの伝播にdbs2.example.comデータベース・リンクが使用されるように指定されます。これは、destination_queue_nameパラメータに@dbs2.example.comが含まれているためです。
ポジティブ・ルール・セットが作成され、伝播に関連付けられます。これは、inclusion_ruleパラメータがTRUEに設定されているためです。ルール・セットでは評価コンテキストSYS.STREAMS$_EVALUATION_CONTEXTが使用されます。ルール・セットの名前はシステムによって生成されます。
2つのルールが作成されます。一方のルールはhr.departments表に対するDML変更の結果を含む行LCRに対してTRUEと評価されます。他方のルールはhr.departments表に対するDDL変更を含むDDL LCRに対してTRUEと評価されます。ルールの名前はシステムによって生成されます。
伝播に関連付けられたポジティブ・ルール・セットにこれらの2つのルールが追加されます。これらのルールは、inclusion_ruleパラメータがTRUEにセットされているため、ポジティブ・ルール・セットに追加されます。
LCRにNULLタグが含まれている場合にのみ、伝播によってLCRが伝播されるように指定されます。これは、include_tagged_lcrパラメータがFALSEに設定されているためです。この動作は、伝播のシステム作成ルールによって実行されます。
伝播されているLCRのソース・データベースがdbs1.example.comになるように指定されます。dbs1.example.comは、現行のデータベースである場合もそうでない場合もあります。ソース・データベースが異なるソース・キューのLCRは伝播されません。
キュー・ツー・キュー伝播用の伝播ジョブが作成されます。
|
注意: キュー・ツー・キュー伝播を使用するには、伝播が行われるキューを含む各データベースの互換レベルが10.2.0以上であることが必要です。 |
|
関連項目:
|
次の例では、DBMS_PROPAGATION_ADMパッケージのCREATE_PROPAGATIONプロシージャを実行して、伝播を作成します。
BEGIN
DBMS_PROPAGATION_ADM.CREATE_PROPAGATION(
propagation_name => 'strm02_propagation',
source_queue => 'strmadmin.strm03_queue',
destination_queue => 'strmadmin.strm04_queue',
destination_dblink => 'dbs2.example.com',
rule_set_name => 'strmadmin.strm01_rule_set',
queue_to_queue => TRUE);
END;
/
このプロシージャを実行すると、次のアクションが実行されます。
strm02_propagationという名前の伝播が作成されます。同じ名前の伝播が存在していない必要があります。
伝播によって現行のデータベース内のstrm03_queueからdbs2.example.comデータベース内のstrm04_queueにメッセージが伝播されるように指定されます。伝播のルール・セットのルールに応じて、伝播されたメッセージはLCRまたはユーザー・メッセージ(あるいはその両方)となります。
メッセージの伝播にdbs2.example.comデータベース・リンクが使用されるように指定されます。
伝播がstrm01_rule_setという名前の既存のルール・セットに関連付けられます。このルール・セットは、伝播のポジティブ・ルール・セットです。
キュー・ツー・キュー伝播用の伝播ジョブが作成されます。
|
注意: キュー・ツー・キュー伝播を使用するには、伝播が行われるキューを含む各データベースの互換レベルが10.2.0以上であることが必要です。 |