日本語PDF

285 Oracle Databaseアドバンスト・キューイング(AQ)のタイプ

この章では、PL/SQL、DBMS_AQおよびDBMS_AQADM向けにOracle Databaseアドバンスト・キューイング(AQ)パッケージで使用されるタイプについて説明します。

この章のトピックは、次のとおりです:

参照:

Oracle Databaseアドバンスト・キューイングの使用方法の詳細は、『Oracle Databaseアドバンスト・キューイング・ユーザーズ・ガイド』を参照してください。

285.1 アドバンスト・キューイング(AQ)のタイプのセキュリティ・モデル

PUBLICには、この章で説明するタイプのEXECUTE権限が付与されます。

285.2 Oracle Databaseアドバンスト・キューイング(AQ)のタイプ —タイプの要約

Oracle Databaseアドバンスト・キューイング(AQ)では、タイプを使用して特定タイプの情報を指定します。

285.2.1 AQ$_AGENTタイプ

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

構文

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

属性

表285-1 AQ$_AGENTの属性

属性 説明

name

メッセージのプロデューサ名またはコンシューマ名です。名前は、予約語に関して、『Oracle Database SQL言語リファレンス』のオブジェクト名ガイドラインに従う必要があります。

address

受信者のプロトコル固有のアドレス。プロトコルが0の場合、アドレスは[schema.]queue[@dblink]の形式になります。

たとえば、サイトdbs1.netHRキューにあるemp_messagesという名前のキューのアドレスは、hr.emp_messages@dbs1.netとなります。

protocol

アドレスを解釈しメッセージを伝播させるプロトコルです。プロトコル1から127は、内部的に使用されるものです。プロトコル番号が128から255の場合、受信者のアドレスはOracle Databaseアドバンスト・キューイングで解釈されません。

285.2.2 AQ$_AGENT_LIST_Tタイプ

このタイプは、DBMS_AQ.LISTENがリスニングするエージェントのリストを識別します。

構文

TYPE SYS.AQ$_AGENT_LIST_T IS TABLE OF SYS.AQ$_AGENT 
   INDEX BY BINARY INTEGER;

285.2.3 AQ$_DESCRIPTORタイプ

このタイプは、通知時にAQ PL/SQLのコールバックが受信するOracle Databaseアドバンスト・キューイングの記述子を指定します。

構文

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

属性

表285-2 AQ$_DESCRIPTORの属性

属性 説明

queue_name

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

consumer_name

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

msg_id

メッセージの指定番号

msg_prop

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

gen_desc

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

msgid_array

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

ntfnsRecdInGrp

グループで受信した通知

285.2.4 AQ$_NTFN_DESCRIPTORタイプ

このタイプは、PL/SQL通知フラグに関する汎用通知記述子を格納するためのものです。

構文

TYPE SYS.AQ$_NTFN_DESCRIPTOR IS OBJECT(   ntfn_flags   NUMBER)

属性

表285-3 AQ$_NTFN_DESCRIPTORの属性

属性 説明

ntfn_flags

規定されたタイムアウト後に通知がすでに削除されている場合は、1に設定します。グループ化を示すには、2に設定します。デフォルトは0です。

285.2.5 AQ$_NTFN_MSGID_ARRAYタイプ

このタイプは、AQネームスペースに通知のグループ化データを格納するためのものです。値230はVARRAYの最大サイズです。

構文

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

285.2.6 AQ$_POST_INFOタイプ

このタイプは、メッセージの転送先となる匿名サブスクリプションを指定します。

構文

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

属性

表285-4 AQ$_POST_INFOの属性

属性 説明

name

転送先となる匿名サブスクリプションの名前。

namespace

その他のアプリケーションからDBMS_AQ.POSTまたはOCISubscriptionPost()を介して通知を受信するには、ネームスペースがDBMS_AQ.NAMESPACE_ANONYMOUSであることが必要です。

payload

匿名サブスクリプションに転送されるペイロード。

285.2.7 AQ$_POST_INFO_LISTタイプ

このタイプは、メッセージの転送先となる匿名サブスクリプションのリストを識別します。

構文

TYPE SYS.AQ$_POST_INFO_LIST AS VARRAY(1024) OF SYS.AQ$_POST_INFO;

285.2.8 AQ$_PURGE_OPTIONS_Tタイプ

このタイプは、キュー表のパージで使用可能なオプションを指定します。

構文

TYPE AQ$_PURGE_OPTIONS_T is RECORD (
   block           BOOLEAN       DEFAULT FALSE
   delivery_mode   PLS_INTEGER   DEFAULT PERSISTENT);

表285-5 AQ$_PURGE_OPTIONS_Tタイプの属性

属性 説明

block

TRUE/FALSE

  • blockTRUEの場合、キュー表をパージする間、キュー表内のすべてのキューで排他的ロックが保持されます。これにより、キュー表のパージ時にエンキュー実行者とデキュー実行者が同時にブロックされます。blockTRUEの場合、パージ・コールは常に成功します。

  • blockのデフォルトはFALSEです。この場合、エンキュー実行者とデキュー実行者はブロックされませんが、同時実行回数が多いと、パージがエラーによって失敗する可能性があります。

delivery_mode

パージするメッセージの種類(DBMS_AQ.BUFFEREDまたはDBMS_AQ.PERSISTENT)。

285.2.9 AQ$_RECIPIENT_LIST_Tタイプ

メッセージを受信するエージェントのリストを識別します。このタイプは、キューが複数デキュー可能な場合のみに使用されます。

構文

TYPE SYS.AQ$_RECIPIENT_LIST_T IS TABLE OF SYS.AQ$_AGENT
   INDEX BY BINARY_INTEGER;

285.2.10 AQ$_REG_INFOタイプ

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

構文

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

属性

表285-6 AQ$_REG_INFOタイプの属性

属性 説明

name

サブスクリプション名を指定します。単一コンシューマ・キューの登録の場合はschema.queue形式のサブスクリプション名、マルチ・コンシューマ・キューの登録の場合はschema.queue:consumer_name形式の名前となります。

namespace

サブスクリプションのネームスペースを指定します。Oracle Database Advanced Queuingキューから通知を受信するには、ネームスペースがDBMS_AQ.NAMESPACE_AQである必要があります。その他のアプリケーションからDBMS_AQ.POSTまたはOCISubscriptionPost()を介して通知を受信するには、ネームスペースがDBMS_AQ.NAMESPACE_ANONYMOUSである必要があります。

callback

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

context

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

anyctx

コールバック・ファンクションに渡されるANYDATAタイプのコンテキストを指定します

ctxtype

コンテキスト・タイプを指定します。有効な値は0 (RAW)または1 (ANYDATA)です

payloadcbk

コールバック・ファンクションのペイロードを指定します

timeout

時間を秒単位で指定します。

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 - グループ化の通知を永久的に送信します。

使用上のノート

次の通知方法を使用できます。

  • OCIコールバック

  • 電子メール・コールバック

  • PL/SQLコールバック

表285-7に、RAW表示が指定された場合に他の通知方法の非永続キューに対して実行されるアクションを示します。表285-8には、XML表示が指定された場合に実行されるアクションを示します。

表285-7 RAW表示が指定された場合の非永続キューに対するアクション

キュー・ペイロード・タイプ OCIコールバック 電子メール PL/SQLコールバック

RAW

OCIコールバックは、ペイロードのRAWデータを受信します。

サポートされていません。

PL/SQLコールバックは、ペイロードのRAWデータを受信します。

Oracle object type

サポートされていません。

サポートされていません。

サポートされていません。

表285-8 XML表示が指定された場合の非永続キューに対するアクション

キュー・ペイロード・タイプ OCIコールバック 電子メール PL/SQLコールバック

RAW

OCIコールバックは、ペイロードのXMLデータを受信します。

XMLデータがSOAPメッセージとしてフォーマットされ、登録されている電子メール・アドレスに送信されます。

PL/SQLコールバックは、ペイロードのXMLデータを受信します。

Oracle object type

OCIコールバックは、ペイロードのXMLデータを受信します。

XMLデータがSOAPメッセージとしてフォーマットされ、登録されている電子メール・アドレスに送信されます。

PL/SQLコールバックは、ペイロードのXMLデータを受信します。

285.2.11 AQ$_REG_INFO_LISTタイプ

キューに対する登録のリストを識別します。

構文

TYPE SYS.AQ$_REG_INFO_LIST AS VARRAY(1024) OF SYS.AQ$_REG_INFO;

285.2.12 AQ$_SUBSCRIBER_LIST_Tタイプ

このタイプは、キューをサブスクライブするサブスクライバのリストを識別します。

構文

TYPE SYS.AQ$_SUBSCRIBER_LIST_T IS TABLE OF SYS.AQ$_AGENT
   INDEX BY BINARY_INTEGER;

285.2.13 DEQUEUE_OPTIONS_Tタイプ

DEQUEUE_OPTIONS_Tは、デキュー操作で使用可能なオプションを指定します。

構文

TYPE DEQUEUE_OPTIONS_T IS RECORD (
   consumer_name     VARCHAR2(30)    DEFAULT NULL,
   dequeue_mode      BINARY_INTEGER  DEFAULT REMOVE,
   navigation        BINARY_INTEGER  DEFAULT NEXT_MESSAGE,
   visibility        BINARY_INTEGER  DEFAULT ON_COMMIT,
   wait              BINARY_INTEGER  DEFAULT FOREVER,
   msgid             RAW(16)         DEFAULT NULL,
   correlation       VARCHAR2(128)   DEFAULT NULL,
   deq_condition     VARCHAR2(4000)  DEFAULT NULL,
   signature         aq$_sig_prop    DEFAULT NULL,
   transformation    VARCHAR2(61)    DEFAULT NULL,
   delivery_mode     PLS_INTEGER     DEFAULT PERSISTENT);

属性

表285-9 DEQUEUE_OPTIONS_Tの属性

属性 説明

consumer_name

コンシューマの名前。コンシューマ名が一致するメッセージのみアクセスされます。キューがマルチ・コンシューマ用に設定されていない場合、このフィールドはNULLに設定してください。

キューのセキュリティを確保するため、consumer_nameに有効なAQ引数名を指定し、dbms_aqadm.enable_db_accessプロシージャ・コールを介して、デキューを実行するデータベース・ユーザーにマップする必要があります。

dequeue_mode

デキューに対応付けられたロック動作を指定します。設定可能な値は次のとおりです。

BROWSE: メッセージのロックを取得せずにメッセージを読み取ります。この仕様は、SELECT文と同じです。

LOCKED: メッセージを読み取り、その書込みロックを取得します。ロックは、トランザクションの間、存続します。この設定は、SELECT FOR UPDATE文と同じです。

REMOVE: メッセージを読み取り、削除します。この設定がデフォルトです。メッセージは保存プロパティに基づいてキュー表に保存されます。

REMOVE_NODATA: メッセージに更新または削除のマークを設定します。メッセージは保存プロパティに基づいてキュー表に保存されます。

navigation

取り出されるメッセージの位置を指定します。最初に位置が判断されます。次に検索基準が適用されます。最後にメッセージが取り出されます。設定可能な値は次のとおりです。

NEXT_MESSAGE: 使用可能で検索基準と一致する次のメッセージを取り出します。前のメッセージがメッセージ・グループに属している場合は、検索基準と一致し、そのメッセージ・グループに属している次の使用可能メッセージが取り出されます。この設定がデフォルトです。

NEXT_TRANSACTION: 現行トランザクション・グループの残り(ある場合)をスキップし、次のトランザクション・グループの最初のメッセージを取り出します。この設定は、現行キューに対してメッセージ・グループが使用可能な場合にのみ使用できます。

FIRST_MESSAGE: 使用可能で検索基準と一致する最初のメッセージを取り出します。この設定により、位置がキューの先頭に再設定されます。

FIRST_MESSAGE_MULTI_GROUP: DBMS_AQ.DEQUEUE_ARRAYへのコールが、利用可能であり検索基準に一致するキューおよびデキュー・メッセージ(異なるトランザクション・グループ間にわたる場合あり)の開始位置をARRAY_SIZE制限に達するまでリセットすることを示します。トランザクション・グループを区別するには、メッセージのTRANSACTION_GROUP属性を参照します。

NEXT_MESSAGE_MULTI_GROUP: DBMS_AQ.DEQUEUE_ARRAYへのコールが、利用可能であり検索基準に一致する次のメッセージ(異なるトランザクション・グループ間にわたる場合あり)をARRAY_SIZE制限に達するまでデキューすることを示します。トランザクション・グループを区別するには、メッセージのTRANSACTION_GROUP属性を参照します。

visibility

新規メッセージを現行トランザクションの一部としてデキューするかどうかを指定します。BROWSEデキュー・モードの使用時は無視されます。設定可能な値は次のとおりです。

ON_COMMIT: デキューは現行トランザクションの一部になります。この設定がデフォルトです。

IMMEDIATE: デキュー操作は現行トランザクションに含まれていません。操作の最後にコミットする自律型トランザクションに含まれています。

wait

検索基準と一致する使用可能なメッセージが存在していない場合の待機時間を指定します。設定可能な値は次のとおりです。

FOREVER: 使用可能なメッセージが発生するまで待機します。この設定がデフォルトです。

NO_WAIT: 待機しません。

NUMBER: 待機時間(秒)。

msgid

デキューするメッセージのメッセージ識別子を指定します。

correlation

デキューするメッセージの相関IDを指定します。パーセント記号(%)やアンダースコア(_)などの特殊なパターン一致文字を使用できます。複数のメッセージがパターンに一致する場合、デキューの順序は決まりません。

deq_condition

メッセージ・プロパティ、メッセージ・データ・プロパティおよびPL/SQLファンクションに基づいた条件式。

deq_conditionはSQL問合せのWHERE句と同様の構文を使用して、ブール式で指定されます。このブール式には、メッセージ・プロパティの状態、ユーザー・データのプロパティ(オブジェクト・ペイロードのみ)、およびPL/SQLまたはSQLファンクション(SQL問合せのWHERE句で指定)の状態を組み込むことができます。メッセージ・プロパティには、prioritycorridおよびキュー表におけるその他の列が含まれます。

メッセージ・ペイロード(オブジェクト・ペイロード)のデキュー条件を指定するには、句にオブジェクト・タイプの属性を使用します。各属性には、ペイロードを格納するキュー表の特定の列を示す識別子として、接頭辞tab.user_dataが必要です。deq_conditionのパラメータは4000バイト以内です。デキュー条件を満たすメッセージが複数ある場合、デキュー順序は未定義です。

signature

現在、実装されていません。

transformation

メッセージをデキューした後に適用される変換を指定します。変換のソース・タイプは、キューのタイプと一致させる必要があります。

delivery_mode

デキュー実行者は、デキュー・オプションでデキューするメッセージの配信モードを指定します。BUFFEREDPERSISTENTまたはPERSISTENT_OR_BUFFEREDを指定できます。デキューされたメッセージのメッセージ・プロパティに、デキューされたメッセージの配信モードが示されます。配列デキューは、配列サイズが1のバッファされたメッセージに対してのみサポートされています。

285.2.14 ENQUEUE_OPTIONS_Tタイプ

ENQUEUE_OPTIONS_Tタイプは、エンキュー操作で使用可能なオプションを指定します。

構文

TYPE SYS.ENQUEUE_OPTIONS_T IS RECORD (
   visibility            BINARY_INTEGER  DEFAULT ON_COMMIT,
   relative_msgid        RAW(16)         DEFAULT NULL,
   sequence_deviation    BINARY_INTEGER  DEFAULT NULL,
   transformation        VARCHAR2(61)    DEFAULT NULL,
   delivery_mode         PLS_INTEGER     NOT NULL DEFAULT PERSISTENT);

属性

表285-10 ENQUEUE_OPTIONS_Tの属性

属性 説明

visibility

エンキュー要求のトランザクション動作を指定します。設定可能な値は次のとおりです。

ON_COMMIT: エンキューは、現行トランザクションの一部です。操作は、トランザクションがコミットされると完了します。この設定がデフォルトです。

IMMEDIATE: エンキュー操作は現行トランザクションに含まれていません。操作の最後にコミットする自律型トランザクションに含まれています。非永続キューにエンキューするときは、この値のみ許可されます。

relative_msgid

順序逸脱操作で参照されるメッセージのメッセージIDを指定します。このフィールドは、sequence_deviationBEFOREが指定されている場合にのみ有効です。順序逸脱が指定されていない場合、このパラメータは無視されます。

sequence_deviation

エンキューされるメッセージが、すでにキューにある他のメッセージより前にデキューされる必要があるかどうかを指定します。設定可能な値は次のとおりです。

BEFORE: メッセージは、relative_msgidで指定されたメッセージより前にエンキューされます。

TOP: メッセージは、他のどのメッセージよりも前にエンキューされます。

transformation

メッセージをエンキューする前に適用される変換を指定します。変換ファンクションの戻り型は、キューの型と一致する必要があります。

delivery_mode

エンキュー実行者は、エンキュー・オプションにエンキューするメッセージの配信モードを指定します。BUFFEREDまたはPERSISTENTを指定できます。エンキューされたメッセージのメッセージ・プロパティには、エンキューされたメッセージの配信モードが示されます。配列エンキューは、配列サイズが1のバッファされたメッセージに対してのみサポートされています。

285.2.15 QUEUE_PROPS_Tタイプ

このタイプは、通知時にAQ PL/SQLのコールバックが受信するOracle Databaseアドバンスト・キューイングの記述子を指定します。

構文

  TYPE QUEUE_PROPS_T IS RECORD (
    retry_delay     NUMBER         DEFAULT 0,
    retention_time  NUMBER         DEFAULT 0,
    sort_list       VARCHAR2(30)   DEFAULT NULL,
    cache_hint      BINARY_INTEGER DEFAULT AUTO
    );

属性

表285-11 QUEUE_PROPS_Tの属性

属性 説明

retry_delay

アプリケーションのロールバック後、スケジュールされたメッセージの再処理が行われるまでの時間を秒単位で指定します。

retention_time

キューからデキューされた後、メッセージがキュー表内に保持される秒数を指定します。

sort_list

シャード・キューは、ENQ_TIMEまたはPRIORITY、ENQ_TIMEによってソートできます。

cache_hint

シャード・キューに対してメッセージをキャッシュするかどうかに関するヒントを指定します。ユーザーは次のいずれかを指定できます。

  • UNCACHED: メッセージ・キャッシュはメッセージをキャッシュしません。

  • CACHED: メッセージ・キャッシュはメッセージをキャッシュし、CACHEDヒントを持つキューを優先します。

  • AUTO: メッセージ・キャッシュは、使用可能なメモリーに基づいて適切な処理を実行します。

285.2.16 SYS.MSG_PROP_Tタイプ

このタイプは、AQメッセージのメッセージ・プロパティをPL/SQL通知クライアント・コールバックに渡すために、PL/SQL通知でaq$_descriptorの1つのフィールドとして使用されます。

構文

CREATE or replace TYPE sys.msg_prop_t AS OBJECT (
   priority         NUMBER,
   delay            NUMBER,
   expiration       NUMBER,
   correlation      VARCHAR2(128),
   attempts         NUMBER,
   exception_queue  VARCHAR2(51),
   enqueue_time     DATE,
   state            NUMBER,
   sender_id        aq$_agent,
   original_msgid   RAW(16),
   delivery_mode    NUMBER);

パラメータ

表285-12 SYS.MSG_PROP_Tタイプの属性

パラメータ 説明

priority

メッセージの優先度を指定します。数値が小さいほど高い優先度を示します。優先度は、負数も含めたあらゆる数値で指定できます。

delay

エンキュー・メッセージの遅延を指定します。遅延は、メッセージがデキュー可能になるまでの秒数を表します。msgidによるデキューの場合、delay操作は上書きされます。遅延設定をしてエンキューされたメッセージはWAITING状態になり、遅延期間が終了するとREADY状態になります。DELAY処理にはキュー・モニターを起動させる必要があります。ただし、必要であれば、システムがキュー・モニターを自動的に起動します。delayは、メッセージをエンキューするプロデューサが設定します。

次の値を設定できます。

NO_DELAY: メッセージは、すぐにデキュー可能になります。

number: メッセージの遅延秒数。

expiration

メッセージの期限切れを指定します。この時間(秒)を経過したメッセージはデキューされません。このパラメータは、メッセージのデキューが可能になった時間からオフセットされます。期限切れ処理にはキュー・モニターを起動させる必要があります。ただし、必要であれば、システムがキュー・モニターを自動的に起動します。

次の値を設定できます。

NEVER: メッセージは時間切れになりません。

number: メッセージをREADY状態にしておく時間(秒数)。期限切れになる前にデキューされない場合、メッセージはEXPIRED状態で例外キューに移されます。

correlation

エンキュー時にメッセージのプロデューサが提供したIDを戻します。

attempts

メッセージのデキューを試みた回数を戻します。このパラメータを、エンキュー時刻に設定することはできません。

exception_queue

メッセージが正常に処理されなかった場合のメッセージの移動先キュー名を指定します。

メッセージは自動的に例外キューへ移動されます。メッセージが自動的に例外キューへ移動されるのは、次の場合です。

  • RETRY_COUNT。キュー作成時に、デキューの試行失敗回数が、DBMS_AQADM.CREATE_QUEUEプロシージャのMAX_RETRIESパラメータで指定した回数を超えた場合。

    マルチ・コンシューマ・キューの場合、デキューの試行失敗回数がコンシューマのMAX_RETRIESパラメータ値のいずれか1つを超えても、メッセージを例外キューに移動できるようになります。ただし、他のすべてのコンシューマにおいて、メッセージが正常にコンシュームされたか、MAX_RETRIESのパラメータ値を超えて試行を失敗すると、メッセージは移動されません。キューに対するMAX_RETRIESは、ALL_QUEUESデータ・ディクショナリ・ビューで参照できます。

    サーバー・プロセスがインスタンスで停止した(ALTER SYSTEM KILL SESSIONまたはSHUTDOWN ABORTなど)ためにデキュー・トランザクションが失敗した場合、RETRY_COUNTは増分されません。

  • 期限切れになるまで、メッセージはデキューされません。

  • 次のエラーのいずれかが発生すると、指定宛先キューへのメッセージ伝播は失敗します。

    * マルチ・コンシューマ宛先キューに受信者が指定されていない。

    * 単一のコンシューマ宛先キューに受信者が指定されている。

    * 宛先キューが例外キューである。

    * 変換適用時にエラーが発生した。

デフォルトは、キュー表に関連付けられている例外キューです。指定した例外キューが移動時に存在しない場合、そのメッセージは、キュー表に関連付けられているデフォルトの例外キューに移動され、アラート・ログに警告ログが記録されます。デフォルトの例外キューが指定されると、デキュー時にNULL値が戻されます。

enqueue_time

メッセージがエンキューされた時刻を指定します。この値はシステムにより決定され、ユーザーはエンキュー時に設定できません。

state

デキュー時のメッセージの状態を指定します。このパラメータを、エンキュー時刻に設定することはできません。次の状態を設定できます。

  • DBMS_AQ.READY: メッセージは処理可能な状態です。

  • DBMS_AQ.WAITING: メッセージは遅延の指定秒数に達していません。

  • DBMS_AQ.PROCESSED: メッセージは処理され、保存されています。

  • DBMSAQ.EXPIRED: メッセージは例外キューに移されました。

sender_id

エンキュー時にメッセージのプロデューサが指定するアプリケーション送信者の識別番号。aq$_agentタイプの送信者IDです。

保護キューでは、エンキュー時に送信者名が必要です。有効なAQエージェント名を指定し、dbms_aqadm. enable_db_accessプロシージャ・コールを介して、エンキューを実行するデータベース・ユーザーにマップする必要があります。送信者アドレスとプロトコルを指定する必要はありません。

メッセージが他のキューから伝播されている場合、デキュー時に戻されるメッセージ・プロパティの送信者IDとして送信者のアドレスが表示される場合があります。リモート・データベース[format source_queue@source_database_name]の場合、アドレスの値は、source_queue(ソース・データベース名)となります。

original_msgid

このパラメータは、Oracle Databaseアドバンスト・キューイングでメッセージを伝播するために使用します。

delivery_mode

DBMS_AQ.BUFFEREDまたはDBMS_AQ.PERSISTENT

285.2.17 MESSAGE_PROPERTIES_Tタイプ

このタイプは、DBMS_AQパッケージ内部で定義されており、個々のメッセージの状態を伝達するためにAQで使用される情報を記述します。これらはエンキュー時に設定され、デキュー時にその値が戻されます。

構文

TYPE message_properties_t IS RECORD (
   priority               BINARY_INTEGER  NOT NULL DEFAULT 1,
   delay                  BINARY_INTEGER  NOT NULL DEFAULT NO_DELAY,
   expiration             BINARY_INTEGER  NOT NULL DEFAULT NEVER,
   correlation            VARCHAR2(128)   DEFAULT NULL,
   attempts               BINARY_INTEGER,
   recipient_list         AQ$_RECIPIENT_LIST_T,
   exception_queue        VARCHAR2(61)    DEFAULT NULL,
   enqueue_time           DATE,
   state                  BINARY_INTEGER,
   sender_id              SYS.AQ$_AGENT   DEFAULT NULL, 
   original_msgid         RAW(16)         DEFAULT NULL,
   signature              aq$_sig_prop    DEFAULT NULL,
   transaction_group      VARCHAR2(30)    DEFAULT NULL,
   user_property          SYS.ANYDATA     DEFAULT NULL
   delivery_mode          PLS_INTEGER     NOT NULL DEFAULT DBMS_AQ.PERSISTENT); 

属性

表285-13 MESSAGE_PROPERTIES_Tの属性

属性 説明

priority

メッセージの優先度を指定します。数値が小さいほど高い優先度を示します。優先度は、負数も含めたあらゆる数値で指定できます。

delay

エンキュー・メッセージの遅延を指定します。遅延は、メッセージがデキュー可能になるまでの秒数を表します。msgidによるデキューの場合、delay操作は上書きされます。遅延設定をしてエンキューされたメッセージはWAITING状態になり、遅延期間が終了するとREADY状態になります。DELAY処理にはキュー・モニターを起動させる必要があります。ただし、必要であれば、システムがキュー・モニターを自動的に起動します。delayは、メッセージをエンキューするプロデューサが設定します。

次の値を設定できます。

NO_DELAY: メッセージは、すぐにデキュー可能になります。

number: メッセージの遅延秒数。

expiration

メッセージの期限切れを指定します。この時間(秒)を経過したメッセージはデキューされません。このパラメータは、メッセージのデキューが可能になった時間からオフセットされます。期限切れ処理にはキュー・モニターを起動させる必要があります。ただし、必要であれば、システムがキュー・モニターを自動的に起動します。

次の値を設定できます。

NEVER: メッセージは時間切れになりません。

number: メッセージをREADY状態にしておく時間(秒数)。期限切れになる前にデキューされない場合、メッセージはEXPIRED状態で例外キューに移されます。

correlation

エンキュー時にメッセージのプロデューサが提供したIDを戻します。

attempts

メッセージのデキューを試みた回数を戻します。このパラメータを、エンキュー時刻に設定することはできません。

recipient_list

このパラメータは、複数のコンシューマが可能なキューに対してのみ有効です。デフォルトの受信者はキューのサブスクライバです。このパラメータはデキュー時にコンシューマに戻されません。

タイプ定義については、「AQ$_AGENTタイプ」を参照してください。

exception_queue

メッセージが正常に処理されなかった場合のメッセージの移動先キュー名を指定します。

メッセージは自動的に例外キューへ移動されます。メッセージが自動的に例外キューへ移動されるのは、次の場合です。

  • RETRY_COUNT。キュー作成時に、デキューの試行失敗回数が、DBMS_AQADM.CREATE_QUEUEプロシージャのMAX_RETRIESパラメータで指定した回数を超えた場合。

    マルチ・コンシューマ・キューの場合、デキューの試行失敗回数がコンシューマのMAX_RETRIESパラメータ値のいずれか1つを超えても、メッセージを例外キューに移動できるようになります。ただし、他のすべてのコンシューマにおいて、メッセージが正常にコンシュームされたか、MAX_RETRIESのパラメータ値を超えて試行を失敗すると、メッセージは移動されません。キューに対するMAX_RETRIESは、ALL_QUEUESデータ・ディクショナリ・ビューで参照できます。

    サーバー・プロセスがインスタンスで停止した(ALTER SYSTEM KILL SESSIONまたはSHUTDOWN ABORTなど)ためにデキュー・トランザクションが失敗した場合、RETRY_COUNTは増分されません。

  • 期限切れになるまで、メッセージはデキューされません。

  • 次のエラーのいずれかが発生すると、指定宛先キューへのメッセージ伝播は失敗します。

    * マルチ・コンシューマ宛先キューに受信者が指定されていない。

    * 単一のコンシューマ宛先キューに受信者が指定されている。

    * 宛先キューが例外キューである。

    * 変換適用時にエラーが発生した。

デフォルトは、キュー表に関連付けられている例外キューです。指定した例外キューが移動時に存在しない場合、そのメッセージは、キュー表に関連付けられているデフォルトの例外キューに移動され、アラート・ログに警告ログが記録されます。デフォルトの例外キューが指定されると、デキュー時にNULL値が戻されます。

enqueue_time

enqueue_time属性では、メッセージがエンキューされた時刻を指定します。この値は常に協定世界時(UTC)で指定され、システムによって決定されるため、ユーザーがエンキュー時に設定することはできません。

state

デキュー時のメッセージの状態を指定します。このパラメータを、エンキュー時刻に設定することはできません。次の状態を設定できます。

  • DBMS_AQ.READY: メッセージは処理可能な状態です。

  • DBMS_AQ.WAITING: メッセージは遅延の指定秒数に達していません。

  • DBMS_AQ.PROCESSED: メッセージは処理され、保存されています。

  • DBMSAQ.EXPIRED: メッセージは例外キューに移されました。

sender_id

エンキュー時にメッセージのプロデューサが指定するアプリケーション送信者の識別番号。aq$_agentタイプの送信者IDです。

保護キューでは、エンキュー時に送信者名が必要です。有効なAQエージェント名を指定し、dbms_aqadm. enable_db_accessプロシージャ・コールを介して、エンキューを実行するデータベース・ユーザーにマップする必要があります。送信者アドレスとプロトコルを指定する必要はありません。

メッセージが他のキューから伝播されている場合、デキュー時に戻されるメッセージ・プロパティの送信者IDとして送信者のアドレスが表示される場合があります。リモート・データベース[format source_queue@source_database_name]の場合、アドレスの値は、source_queue(ソース・データベース名)となります。

original_msgid

このパラメータは、Oracle Databaseアドバンスト・キューイングでメッセージを伝播するために使用します。

signature

現在、実装されていません。

transaction_group

デキューされたメッセージのtransaction_groupを指定します。同じトランザクション・グループに属するメッセージには、同じ属性値が指定されます。この属性は、DBMS_AQ.DEQUEUE_ARRAYでのみ設定されます。この属性を使用しても、DBMS_AQ.ENQUEUEまたはDBMS_AQ.ENQUEUE_ARRAYコールを介してメッセージのトランザクション・グループを設定することはできません。

user_property

このオプション属性を使用して、ペイロードの追加情報を格納できます。

delivery_mode

このメッセージ・パブリッシャは、message_propertiesに配信モードを指定します。DBMS_AQ.BUFFEREDまたはDBMS_AQ.PERSISTENTを指定できます。配列エンキューは、配列サイズが1のバッファされたメッセージに対してのみサポートされています。

285.2.18 MESSAGE_PROPERTIES_ARRAY_Tタイプ

このタイプは、メッセージのプロパティを保存するために、dbms_aq.enqueue_arrayおよびdbms_aq.dequeue_arrayコールで使用されます。

payload_arrayの各エレメントは、MESSAGE_PROPERTIES_ARRAY_T VARRAYのエレメントと対応している必要があります。

構文

TYPE MESSAGE_PROPERTIES_ARRAY_T IS VARRAY (2147483647)
   OF MESSAGE_PROPERTIES_T;

285.2.19 MSGID_ARRAY_Tタイプ

msgid_array_tタイプは、エンキューまたはデキューされたメッセージに対応するメッセージIDを保存するために、dbms_aq.enqueue_arrayおよびdbms_aq.dequeue_arrayコールで使用されます。

構文

TYPE MSGID_ARRAY_T IS TABLE OF RAW(16) INDEX BY BINARY_INTEGER