この章では、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を含むペイロードの場合、エンキューおよびデキュー操作を実行するには、キュー表に対する明示的なSelect 、Insert およびUpdate 権限を付与する必要があります。 |
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(ゼロ)です。
TYPE AQ$_RECIPIENT_LIST_T IS TABLE OF aq$_agent INDEX BY BINARY_INTEGER;
このコンポーネントでは、メッセージを受信するエージェントのリストを識別します。
TYPE AQ$_AGENT_LIST_T IS TABLE OF aq$_agent INDEX BY BINARY INTEGER;
このコンポーネントでは、DBMS_AQ.LISTEN
をリスニングするエージェントのリストを識別します。
TYPE AQ$_SUBSCRIBER_LIST_T IS TABLE OF aq$_agent INDEX BY BINARY INTEGER;
このコンポーネントでは、このキューをサブスクライブするサブスクライバのリストを識別します。
TYPE AQ$_REG_INFO_LIST AS VARRAY(1024) OF sys.aq$_reg_info;
このコンポーネントでは、キューへの登録リストを識別します。
TYPE AQ$_POST_INFO_LIST AS VARRAY(1024) OF sys.aq$_post_info;
このコンポーネントでは、メッセージが転送される匿名サブスクリプションのリストを識別します。
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型属性
属性 | 説明 |
---|---|
|
サブスクリプション名を指定します。サブスクリプション名は、シングル・コンシューマ・キューに対する登録の場合は |
|
サブスクリプションの名前空間を指定します。Oracle Streams AQキューから通知を受信するには、namespaceを |
|
メッセージ通知で実行されるアクションを指定します。HTTP通知の場合、 |
|
コールバック関数に渡すコンテキストを指定します。 |
|
次の1つ以上の値に設定して、サービスの通知品質を指定できます。
|
|
現在、グループ化の基準を指定できるのは、次のフラグを設定した場合のみです。デフォルト値は0(ゼロ)です。
|
|
グループ化通知の周期を秒で指定します。 |
|
|
|
通知のグループ化の開始時間。ユーザーがタイムゾーンで有効なタイムスタンプで指定した時間に、通知のグループ化を開始できます。グループ化を使用する際に |
|
グループ化の通知が通知のグループ化の繰返し件数で指定した回数送信された後、通常の通知に戻ります。ntfn_grouping_repeat_countを指定しない場合、デフォルトで次のように設定されます。
|
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記述子を指定します。属性は次のとおりです。
メッセージ・プロパティ型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
に設定されます。
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
です。
TYPE SYS.AQ$_NTFN_MSGID_ARRAY AS VARRAY(1073741824)OF RAW(16);
このコンポーネントは、AQ名前空間のグループ化の通知データを、最大VARRYサイズ、値230で格納します。
INFINITE
、TRANSACTIONAL
、NORMAL_QUEUE
などの列挙定数を値として選択する場合、定数はそれを定義するパッケージのスコープとともに指定する必要があります。管理インタフェースに関連付ける型の前には、必ずDBMS_AQADM
を付加します。次に例を示します。
DBMS_AQADM.NORMAL_QUEUE
表2-3は、Oracle Streams Advanced Queuing管理インタフェースの列挙定数を示しています。
表2-3 Oracle Streams Advanced Queuing管理インタフェースの列挙定数
パラメータ | オプション |
---|---|
|
|
|
|
|
|
|
|
注意: 非永続キューは、Oracle Streams Advanced Queuing 10gリリース2(10.2)では非推奨。かわりにバッファ済メッセージを使用することをお薦めします。 |
BROWSE
、LOCKED
、REMOVE
などの列挙定数を使用する場合、PL/SQL定数はそれを定義するパッケージのスコープとともに指定する必要があります。操作インタフェースに関連付ける型の前には、必ずDBMS_AQADM
を付加します。次に例を示します。
DBMS_AQ.BROWSE
表2-4は、Oracle Streams Advanced Queuing操作インタフェースの列挙定数を示しています。
表2-4 Oracle Streams Advanced Queuing操作インタフェースの列挙定数
パラメータ | オプション |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
多数の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 またはspfile でAQ_TM_PROCESSES = 0 を設定する必要があります。AQ_TM_PROCESSES パラメータはゼロ(0)に設定しないでください。Oracle Streamsを使用している場合、このパラメータをゼロに設定すると、Oracle Databaseに影響を及ぼす重大な問題を引き起こす可能性があります。 |
伝播およびPL/SQL通知は、ジョブ・キュー(Jnnn)・プロセスによって処理されます。JOB_QUEUE_PROCESSES
パラメータを指定する必要はなくなりました。データベース・スケジューラが、伝播および通知ジョブに必要なジョブ・キュー・プロセスを自動的に開始します。