ヘッダーをスキップ
Oracle® Streamsアドバンスト・キューイング・ユーザーズ・ガイド
11gリリース2 (11.2)
B61355-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

2 基本的なコンポーネント

この章では、Oracle Streams Advanced Queuing(AQ)の基本的なコンポーネントについて説明します。

この章の内容は次のとおりです。

オブジェクト名

object_name := VARCHAR2
object_name := [schema_name.]name

このコンポーネントは、データベース・オブジェクトに名前を付けます。このネーミング規則は、キュー、キュー表およびオブジェクト型に適用されます。

オブジェクト名は、オプションのスキーマ名および名前で指定します。スキーマ名を指定しない場合は、現行のスキーマが想定されます。名前は、『Oracle Database SQL言語リファレンス』にある予約語のガイドラインに従って指定する必要があります。スキーマ名、エージェント名およびオブジェクト型の名前はそれぞれ30バイト以下である必要があります。一方、キュー名およびキュー表名は、最大24バイトで指定できます。

タイプ名

type_name := VARCHAR2
type_name := object_type | "RAW"

このコンポーネントでは、キュー・タイプを定義します。オブジェクト型の属性数は最大で900です。

RAW型のペイロードを格納するために、Oracle Streams Advanced Queuingでは、ペイロード・リポジトリとしてLOB列を持つキュー表が作成されます。ペイロードのサイズは、32KB以下のデータにする必要があります。LOB列はRAWペイロードの格納に使用されるため、Oracle Streams Advanced Queuing管理者は、LOB表領域を選択して、キュー表作成時にstorage_clauseパラメータにLOB記憶域文字列を設定すると、LOB記憶域を構成できます。


注意:

LOBを含むペイロードの場合、エンキューおよびデキュー操作を実行するには、キュー表に対する明示的なSelectInsertおよびUpdate権限を付与する必要があります。

AQエージェント型

TYPE AQ$_AGENT IS OBJECT (
   name            VARCHAR2(30), 
   address         VARCHAR2(1024),
   protocol        NUMBER);

このコンポーネントでは、メッセージプロデューサまたはコンシューマを識別します。

マルチ・コンシューマ・キューにサブスクライバとして追加されたすべてのコンシューマは、AQ$_AGENTパラメータに一意の値を持つ必要があります。2つのサブスクライバがAQ$_AGENT型のNAME属性、ADDRESS属性およびPROTOCOL属性に同じ値を持つことはできません。この3つの属性のうち少なくとも1つは、2つのサブスクライバに対して異なる値にする必要があります。

多くのサブスクライバを追加するには、DBMS_AQADM.ADD_SUBSCRIBERプロシージャを繰り返し使用することで、1つのマルチ・コンシューマ・キュー当たり最大1024サブスクライバを追加できます。

この型は次の3つの属性を持ちます。

  • name

    この属性は、メッセージのプロデューサまたはコンシューマの名前を指定します。アプリケーション名か、アプリケーションによって割り当てられた名前のいずれかです。キュー自体が、別のキューからエンキューまたはデキューしているエージェントでも可能です。名前は、『Oracle Database SQL言語リファレンス』にある予約語のガイドラインに従って指定する必要があります。

  • address

    この属性はprotocolのコンテキストで解析されます。protocolが0(デフォルト)の場合、address[schema.]queue[@dblink]形式です。

  • protocol

    この属性では、アドレスを解析してメッセージを伝播するプロトコルを指定します。デフォルト値は0(ゼロ)です。

AQ受信者リスト型

TYPE AQ$_RECIPIENT_LIST_T IS TABLE OF aq$_agent
           INDEX BY BINARY_INTEGER;
 

このコンポーネントでは、メッセージを受信するエージェントのリストを識別します。

AQエージェント・リスト型

TYPE AQ$_AGENT_LIST_T IS TABLE OF aq$_agent 
           INDEX BY BINARY INTEGER; 

このコンポーネントでは、DBMS_AQ.LISTENをリスニングするエージェントのリストを識別します。

AQサブスクライバ・リスト型

TYPE AQ$_SUBSCRIBER_LIST_T IS TABLE OF aq$_agent
          INDEX BY BINARY INTEGER;

このコンポーネントでは、このキューをサブスクライブするサブスクライバのリストを識別します。

AQ登録情報リスト型

TYPE AQ$_REG_INFO_LIST AS VARRAY(1024) OF sys.aq$_reg_info;

このコンポーネントでは、キューへの登録リストを識別します。

AQ転送情報リスト型

TYPE AQ$_POST_INFO_LIST AS VARRAY(1024) OF sys.aq$_post_info;

このコンポーネントでは、メッセージが転送される匿名サブスクリプションのリストを識別します。

AQ登録情報型

TYPE SYS.AQ$_REG_INFO IS OBJECT (
   name                              VARCHAR2(128),
   namespace                         NUMBER,
   callback                          VARCHAR2(4000),
   context                           RAW(2000)  DEFAULT NULL,
   qosflags                          NUMBER,
   timeout                           NUMBER
   ntfn_grouping_class               NUMBER,
   ntfn_grouping_value               NUMBER    DEFAULT 600,
   ntfn_grouping_type                NUMBER,
   ntfn_grouping_start_time          TIMESTAMP WITH TIME ZONE,
   ntfn_grouping_repeat_count   NUMBER);

このコンポーネントでは、メッセージのプロデューサまたはコンシューマを識別します。このコンポーネントの属性は、次のとおりです。属性qosflagsおよびtimeoutは、Oracle Streams Advanced Queuing 10gリリース2(10.2)の通知拡張機能の一部です。

表2-1 AQ$_REG_INFO型属性

属性 説明

name

サブスクリプション名を指定します。サブスクリプション名は、シングル・コンシューマ・キューに対する登録の場合はschema.queue、またはマルチ・コンシューマ・キューに対する登録の場合はchema.queue:consumer_nameという形式です。

namespace

サブスクリプションの名前空間を指定します。Oracle Streams AQキューから通知を受信するには、namespaceをDBMS_AQ.NAMESPACE_AQに設定する必要があります。DBMS_AQ.POSTまたはOCISubscriptionPost()を介して他のアプリケーションから通知を受信するには、namespaceをDBMS_AQ.NAMESPACE_ANONYMOUSに設定する必要があります。

callback

メッセージ通知で実行されるアクションを指定します。HTTP通知の場合、http://www.company.com:8080を使用します。電子メール通知の場合、mailto://xyz@company.comを使用します。PLSQLCALLBACKプロシージャのメッセージ・ペイロードの場合、plsql://schema.procedure?PR=0を使用します。PLSQLCALLBACKプロシージャのXMLに変換されたユーザー定義済のメッセージ・ペイロードの場合、plsql://schema.procedure?PR=1を使用します。

context

コールバック関数に渡すコンテキストを指定します。

qosflags

次の1つ以上の値に設定して、サービスの通知品質を指定できます。

  • NTFN_QOS_RELIABLE: この値は、信頼できる通知が必要であることを示します。信頼できる通知は、インスタンスとデータベースの再起動にまたがって存続します。

  • NTFN_QOS_PAYLOAD - この値は、ペイロード配信が必要であることを指定します。これは、クライアント通知およびRAWキューに対してのみサポートされます。

  • NTFN_QOS_PURGE_ON_NTFN - この値は、この登録位置に最初の通知が配信されると、登録が自動的にパージされるように指定します。

ntfn_grouping_class

現在、グループ化の基準を指定できるのは、次のフラグを設定した場合のみです。デフォルト値は0(ゼロ)です。ntfn_grouping_classが0(ゼロ)の場合、他のすべての通知グループ属性は0(ゼロ)である必要があります。

  • NTFN_GROUPING_CLASS_TIME - 通知が時間別にグループ化されます。ユーザーが時間の値を指定すると、時間の終了時に通知がパブリッシュされます。

ntfn_grouping_value

グループ化通知の周期を秒で指定します。ntfn_grouping_repeat_countが使い果されるまで、グループ化通知が周期的に送信される時間を表します。

ntfn_grouping_type

  • NTFN_GROUPING_TYPE_SUMMARY - 間隔内で発生したすべての通知のサマリー。(デフォルト)

  • NTFN_GROUPING_TYPE_LAST - 間隔内で発生した最後の通知。

ntfn_grouping_start_time

通知のグループ化の開始時間。ユーザーがタイムゾーンで有効なタイムスタンプで指定した時間に、通知のグループ化を開始できます。グループ化を使用する際にntfn_grouping_start_timeが指定されない場合、デフォルトでタイムゾーンの現在のタイムスタンプに設定されます。

ntfn_grouping_repeat_count

グループ化の通知が通知のグループ化の繰返し件数で指定した回数送信された後、通常の通知に戻ります。ntfn_grouping_repeat_countを指定しない場合、デフォルトで次のように設定されます。

  • NTFN_GROUPING_FOREVER - グループ化の通知を永久的に送信します。


AQ通知記述子型

TYPE SYS.AQ$_DESCRIPTOR IS OBJECT (
   queue_name      VARCHAR2(61),
   consumer_name   VARCHAR2(30),
   msg_id          RAW(16),
   msg_prop        MSG_PROP_T,
   gen_desc        AQ$_NTFN_DESCRIPTOR,
   msgid_array     SYS.AQ$_NTFN_MSGID_ARRAY, 
   ntfnsRecdInGrp  NUMBER);

このコンポーネントでは、通知時にOracle Streams Advanced Queuing PL/SQLコールバックによって受信されるOracle Streams Advanced Queuing記述子を指定します。属性は次のとおりです。

表2-2 AQ$_DESCRIPTOR属性

属性 説明

queue_name

メッセージがエンキューされ、通知されたキューの名前を指定します。

consumer_name

マルチ・コンシューマ・キューのコンシューマの名前

msg_id

メッセージの指定番号

msg_prop

MSG_PROP_T型で指定されたメッセージ・プロパティ

gen_desc

タイムアウト指定を示します。

msgid_array

グループ化の通知のメッセージIDリスト

ntfnsRecdInGrp

グループで受信した通知


AQメッセージ・プロパティ型

メッセージ・プロパティ型msg_prop_tには、次のコンポーネントがあります。

TYPE AQ$_MSG_PROP_T IS OBJECT(
   priority         number,
   delay            number,
   expiration       number,
   correlation      varchar2(128),
   attempts         number,
   recipent_list    aq$_recipient_list_t,
   exception_queue  varchar2(51),
   enqueue_time     date,
   state            number,
   sender_id        aq$_agent,
   original_misgid  raw(16),
   delivery_mode    number);

関連項目:

『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』のMESSAGE_PROPERTIES_T型に関する項

タイムアウト指定型AQ$_NTFN_DESCRIPTORには、次の単一コンポーネントがあります。

TYPE AQ$_NTFN_DESCRIPTOR IS OBJECT(
   NTFN_FLAGS   number);

NTFN_FLAGSは、指定のタイムアウト後に通知が削除されている場合は1、それ以外の場合は0に設定されます。

AQ転送情報型

TYPE SYS.AQ$_POST_INFO IS OBJECT (
  name       VARCHAR2(128),
  namespace  NUMBER,
  payload    RAW(2000));

このコンポーネントでは、メッセージの転送先となる匿名サブスクリプションを指定します。次の3つの属性があります。

  • name

    この属性では、転送する匿名サブスクリプションの名前を指定します。

  • namespace

    この属性では、匿名サブスクリプションの名前空間を指定します。DBMS_AQ.POSTまたはOCISubscriptionPost()を使用して他のアプリケーションから通知を受信するには、namespaceをDBMS_AQ.NAMESPACE_ANONYMOUSに設定する必要があります。

  • payload

    この属性では、匿名サブスクリプションに転送するペイロードを指定します。デフォルトはNULLです。

AQ$_NTFN_MSGID_ARRAY型

TYPE SYS.AQ$_NTFN_MSGID_ARRAY   AS VARRAY(1073741824)OF RAW(16);

このコンポーネントは、AQ名前空間のグループ化の通知データを、最大VARRYサイズ、値230で格納します。

Oracle Streams Advanced Queuing管理インタフェースの列挙定数

INFINITETRANSACTIONALNORMAL_QUEUEなどの列挙定数を値として選択する場合、定数はそれを定義するパッケージのスコープとともに指定する必要があります。管理インタフェースに関連付ける型の前には、必ずDBMS_AQADMを付加します。次に例を示します。

DBMS_AQADM.NORMAL_QUEUE

表2-3は、Oracle Streams Advanced Queuing管理インタフェースの列挙定数を示しています。

表2-3 Oracle Streams Advanced Queuing管理インタフェースの列挙定数

パラメータ オプション

retention

0、1、2、...INFINITE

message_grouping

TRANSACTIONALNONE

queue_type

NORMAL_QUEUEEXCEPTION_QUEUE、NON_PERSISTENT_QUEUE

delivery_mode

BUFFEREDPERSISTENTPERSISTENT_OR_BUFFERED



注意:

非永続キューは、Oracle Streams Advanced Queuing 10gリリース2(10.2)では非推奨。かわりにバッファ済メッセージを使用することをお薦めします。

Oracle Streams Advanced Queuing操作インタフェースの列挙定数

BROWSELOCKEDREMOVEなどの列挙定数を使用する場合、PL/SQL定数はそれを定義するパッケージのスコープとともに指定する必要があります。操作インタフェースに関連付ける型の前には、必ずDBMS_AQADMを付加します。次に例を示します。

DBMS_AQ.BROWSE

表2-4は、Oracle Streams Advanced Queuing操作インタフェースの列挙定数を示しています。

表2-4 Oracle Streams Advanced Queuing操作インタフェースの列挙定数

パラメータ オプション

visibility

IMMEDIATEON_COMMIT

dequeue mode

BROWSELOCKEDREMOVEREMOVE_NODATA

navigation

FIRST_MESSAGENEXT_MESSAGENEXT_TRANSACTION

state

WAITINGREADYPROCESSEDEXPIRED

wait

FOREVERNO_WAIT

delay

NO_DELAY

expiration

NEVER

namespace

NAMESPACE_AQNAMESPACE_ANONYMOUS

delivery_mode

BUFFEREDPERSISTENTPERSISTENT_OR_BUFFERED

quosflags

NTFN_QOS_RELIABLENTFN_QOS_PAYLOADNTFN_QOS_PURGE_ON_NTFN

ntfn_grouping_class

NFTN_GROUPING_CLASS_TIME

ntfn_grouping_type

NTFN_GROUPING_TYPE_SUMMARYNTFN_GROUPING_TYPE_LAST

ntfn_grouping_repeat_count

NTFN_GROUPING_FOREVER


AQバックグラウンド・プロセス

キュー・モニター・プロセス

多数のOracle Streams AQまたはストリーム・タスクが、バックグラウンドで実行されます。これには、READY状態に指定されたDELAYでのメッセージの変換、メッセージの期限切れ、例外キューへのメッセージの移動、バッファ済メッセージのオーバーフローおよびリカバリ、その他の類似する操作が含まれます。

これらはAQバックグラウンド・プロセスのセットで実行されます。これにはコーディネータ・プロセス、名前QMNC(リンク)が含まれ、必要に応じて動的に下位プロセスQxxを起動します。下位プロセス数は自動的に決定されて絶えず調整されます。

Oracle Streams AQまたはストリームを使用するときに、AQ_TM_PROCESSESを設定する必要はなくなりました。値が指定されている場合、その値がQxxプロセスの開始時に考慮されます。ただし、Qxxプロセスの数は、AQ_TM_PROCESSESで指定した値とは異なる場合があります。

QMNCは、キューの使用時および新規キューの作成時のみ実行されます。ストリームのレプリケーションおよびメッセージ・ユーザーに影響があります。

バックグラウンド・プロセスを使用不可にするAPIと使用可能にするAPIを分離する必要はありません。その制御は、AQ_TM_PROCESSESをゼロまたはゼロ以外に設定することで行います。ただし、AQ_TM_PROCESSESパラメータは指定せず、システムの自動チューニングを利用することをお薦めします。


注意:

キュー・モニター・コーディネータを無効にするには、pfileまたはspfileAQ_TM_PROCESSES = 0を設定する必要があります。AQ_TM_PROCESSESパラメータはゼロ(0)に設定しないでください。Oracle Streamsを使用している場合、このパラメータをゼロに設定すると、Oracle Databaseに影響を及ぼす重大な問題を引き起こす可能性があります。

ジョブ・キュー・プロセス

伝播およびPL/SQL通知は、ジョブ・キュー(Jnnn)・プロセスによって処理されます。JOB_QUEUE_PROCESSESパラメータを指定する必要はなくなりました。データベース・スケジューラが、伝播および通知ジョブに必要なジョブ・キュー・プロセスを自動的に開始します。