2 Oracle Transactional Event QueuesおよびAdvanced Queuingの基本コンポーネント
このトピックでは、Oracle Database Advanced Queuingの基本コンポーネントを示します。
オブジェクト名
このコンポーネントは、データベース・オブジェクトに名前を付けます。
object_name := VARCHAR2 object_name := [schema_name.]name
このネーミング規則は、キュー、キュー表およびオブジェクト型に適用されます。
オブジェクト名は、オプションのスキーマ名および名前で指定します。スキーマ名を指定しない場合は、現行のスキーマが想定されます。名前は、『Oracle Database SQL言語リファレンス』『Oracle Database SQL言語リファレンス』にある予約語のガイドラインに従って指定する必要があります。スキーマ名、エージェント名およびオブジェクト型の名前はそれぞれ128バイト以下である必要があります。一方、12cリリース2 (12.2)以降では、キュー名およびキュー表名は、最大122バイトで指定できます。
タイプ名
このコンポーネントでは、キュー・タイプを定義します。
type_name := VARCHAR2
type_name := object_type | "RAW"
オブジェクト型の属性数は最大で900です。
RAW
型のペイロードを格納するために、Oracle Database Advanced Queuingでは、ペイロード・リポジトリとしてLOB列を持つキュー表が作成されます。ペイロードのサイズは、32KB以下のデータにする必要があります。LOB
列はRAW
ペイロードの格納に使用されるため、Oracle Databaseアドバンスト・キューイング管理者は、LOB
表領域を選択して、キュー表作成時にstorage_clause
パラメータにLOB
記憶域文字列を設定すると、LOB
記憶域を構成できます。
ノート:
LOBを含むペイロードの場合、エンキューおよびデキュー操作を実行するには、キュー表に対する明示的なSelect
、Insert
および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エージェント・リスト型
このコンポーネントでは、DBMS_AQ.LISTEN
をリスニングするエージェントのリストを識別します。
TYPE AQ$_AGENT_LIST_T IS TABLE OF aq$_agent INDEX BY BINARY INTEGER;
AQサブスクライバ・リスト型
このコンポーネントでは、このキューをサブスクライブするサブスクライバのリストを識別します。
TYPE AQ$_SUBSCRIBER_LIST_T IS TABLE OF aq$_agent INDEX BY BINARY INTEGER;
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);
このコンポーネントの属性は、次のとおりです。
表2-1 AQ$_REG_INFO型属性
属性 | 説明 |
---|---|
|
サブスクリプション名を指定します。単一コンシューマ・キューの登録の場合は |
|
サブスクリプションのネームスペースを指定します。Oracle Database AQキューから通知を受信するには、namespaceを |
|
メッセージ通知時に実行されるアクションを指定します。HTTP通知の場合、 |
|
コールバック関数に渡すコンテキストを指定します。 |
|
次の1つ以上の値に設定して、サービスの通知品質を指定できます。
|
|
グループ化の基準を指定するために現在設定できるのは、次のフラグのみです。デフォルト値は0(ゼロ)です。
|
|
グループ化通知の周期を秒で指定します。 |
|
|
|
通知のグループ化の開始時間。通知のグループ化は、ユーザーが指定した時間に開始できますが、この時間はタイムゾーン付きの有効なタイムスタンプである必要があります。グループ化を使用する際に |
|
グループ化の通知が通知のグループ化の繰返し件数で指定した回数送信された後、通常の通知に戻ります。ntfn_grouping_repeat_countを指定しない場合、デフォルトで次のように設定されます。
|
AQ通知記述子型
このコンポーネントは、通知時にAQ PL/SQLのコールバックが受信するOracle Databaseアドバンスト・キューイングの記述子を指定します。
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);
次の属性が含まれます。
表2-2 AQ$_DESCRIPTOR属性
属性 | 説明 |
---|---|
|
メッセージがエンキューされ、通知されたキューの名前を指定します。 |
|
マルチ・コンシューマ・キューのコンシューマの名前 |
|
メッセージの指定番号 |
|
|
|
タイムアウト指定を示します。 |
|
グループ化の通知のメッセージIDリスト |
|
グループで受信した通知 |
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);
タイムアウト指定型AQ$_NTFN_DESCRIPTOR
には、次の単一コンポーネントがあります。
TYPE AQ$_NTFN_DESCRIPTOR IS OBJECT( NTFN_FLAGS number);
NTFN_FLAGS
は、指定のタイムアウト後に通知が削除されている場合は1
、それ以外の場合は0
に設定されます。
関連項目:
『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』のMESSAGE_PROPERTIES_T型に関する項
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タイプ
このコンポーネントは、AQ名前空間のグループ化の通知データを、最大VARRYサイズ、値230で格納します。
TYPE SYS.AQ$_NTFN_MSGID_ARRAY AS VARRAY(1073741824)OF RAW(16);
AQ管理インタフェースの列挙定数
INFINITE
、TRANSACTIONAL
、NORMAL_QUEUE
などの列挙定数を値として選択する場合、定数はそれを定義するパッケージのスコープとともに指定する必要があります。
管理インタフェースに関連付けられているすべてのタイプには、DBMS_AQADM
を付加する必要があります。次に例を示します。
DBMS_AQADM.NORMAL_QUEUE
表2-3は、Oracle Database Advanced Queuing管理インタフェースの列挙定数を示しています。
表2-3 Oracle Database Advanced Queuing管理インタフェースの列挙定数
パラメータ | オプション |
---|---|
|
|
|
|
|
|
|
|
ノート:
非永続キューは、Oracle Database Advanced Queuing 10gリリース2 (10.2)では非推奨です。かわりにバッファ済メッセージを使用することをお薦めします。
AQ操作インタフェースの列挙定数
BROWSE
、LOCKED
、REMOVE
などの列挙定数を使用する場合、PL/SQL定数はそれを定義するパッケージのスコープとともに指定する必要があります。
操作インタフェースに関連付ける型の前には、必ずDBMS_AQADM
を付加します。次に例を示します。
DBMS_AQ.BROWSE
表2-4は、Oracle Database Advanced Queuing操作インタフェースの列挙定数を示しています。
表2-4 Oracle Database Advanced Queuing操作インタフェースの列挙定数
パラメータ | オプション |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AQバックグラウンド・プロセス
このトピックでは、Oracle Database Advanced Queuingのバックグラウンド・プロセスについて説明します。
キュー・モニター・プロセス
AQ_TM_PROCESSES
パラメータは指定せず、システムの自動チューニングを利用することをお薦めします。
多数のOracle Database Advanced Queuingタスクが、バックグラウンドで実行されます。これには、READY
状態に指定されたDELAY
でのメッセージの変換、メッセージの期限切れ、例外キューへのメッセージの移動、バッファ済メッセージのオーバーフローおよびリカバリ、その他の類似する操作が含まれます。
Oracle Database AQを使用するときに、AQ_TM_PROCESSES
を設定する必要はなくなりました。値が指定されている場合、その値がQxx
プロセスの開始時に考慮されます。ただし、Qxxプロセスの数は、AQ_TM_PROCESSES
で指定した値とは異なる場合があります。
バックグラウンド・プロセスを使用不可にするAPIと使用可能にするAPIを分離する必要はありません。その制御は、AQ_TM_PROCESSES
をゼロまたはゼロ以外に設定することで行います。ただし、AQ_TM_PROCESSES
パラメータは指定せず、システムの自動チューニングを利用することをお薦めします。
ジョブ・キュー・プロセス
伝播およびPL/SQL通知は、ジョブ・キュー(Jnnn)・プロセスによって処理されます。
JOB_QUEUE_PROCESSES
パラメータを指定する必要はなくなりました。データベース・スケジューラが、伝播および通知ジョブに必要なジョブ・キュー・プロセスを自動的に開始します。
AQバックグラウンド・アーキテクチャ
Oracle Database Advanced Queuing 12cリリース1 (12.1)では、3層設計のAQバックグラウンド・アーキテクチャが新たに採用されています。
-
Tier1 (AQPC): アドバンスト・キューイング・プロセス・コーディネータと呼ばれる単一のバックグラウンド・プロセスがインスタンスの開始時に作成されます。これは、様々なマスター・プロセスの作成および管理を実行します。コーディネータ統計は、
GV$AQ_BACKGROUND_COORDINATOR
を使用して表示できます。 -
Tier2 (QM**): キュー・モニターと呼ばれる多くのマスター・プロセスがあります。それぞれ、異なるタイプのジョブを処理します。ジョブのタイプには、通知(Emonプール)、キュー・モニター(TEQ時間マネージャの処理など)、クロス・プロセスなどがあります。
ノート:
QMNCおよびEMNCなどの古いプロセスは、新しいマスター・プロセスのいずれかに含まれます。
ジョブは、そのタスクを実行するために、複数のサーバー・プロセス(Q***)に渡る独自のスケジュール・メカニズムを必要とする作業タイプとして定義できます。マスター・プロセス統計およびそのジョブは、
GV$AQ_JOB_COORDINATOR
を使用して表示できます。 -
Tier3(Q***): 前述のすべてのマスター・プロセスに対する単一のサーバー・プロセス・プールがあります。各プロセスは、一度に1つのマスター・プロセスに関連付けられます。ただし、元のマスターを使用する必要性がなくなった場合、別のマスターに再スケジュールできます。これらのサーバーにより、各マスターのジョブが実行され、パフォーマンスおよびスケーラビリティが向上します。サーバー・プロセス統計および現在のマスターの関連付けは、
GV$AQ_SERVER_POOL
を使用して表示できます。