日本語PDF

8 Oracle Database Advanced Queuing管理インタフェース

次のトピックでは、Oracle Database Advanced Queuing (AQ)の管理インタフェースについて説明します。

関連項目:

非シャード・キュー表の管理

次のトピックでは、非シャード・キュー表を管理する方法について説明します。

キュー表の作成

DBMS_AQADM.CREATE_QUEUE_TABLEは、事前定義タイプのメッセージ用の非シャード・キュー表を作成します。

DBMS_AQADM.CREATE_QUEUE_TABLE(
   queue_table          IN      VARCHAR2,
   queue_payload_type   IN      VARCHAR2,
   storage_clause       IN      VARCHAR2        DEFAULT NULL,
   sort_list            IN      VARCHAR2        DEFAULT NULL,
   multiple_consumers   IN      BOOLEAN         DEFAULT FALSE,
   message_grouping     IN      BINARY_INTEGER  DEFAULT NONE,
   comment              IN      VARCHAR2        DEFAULT NULL,
   auto_commit          IN      BOOLEAN         DEFAULT TRUE,
   primary_instance     IN      BINARY_INTEGER  DEFAULT 0, 
   secondary_instance   IN      BINARY_INTEGER  DEFAULT 0,
   compatible           IN      VARCHAR2        DEFAULT NULL,
   secure               IN      BOOLEAN         DEFAULT FALSE
   replication_mode     IN      BINARY_INTEGER  DEFAULT NONE);

次の必須およびオプションのパラメータがあります。

パラメータ 説明

queue_table

この必須パラメータは、キュー表名を指定します。

データベースの互換性が10.0である場合のみ、大文字と小文字が混在するキュー表の名前を指定できますが、名前を二重引用符で囲む必要があります。したがって、abc.efgは、スキーマがABCで名前がEFGであることを示しますが、"abc"."efg"はスキーマがabcで名前がefgであることを示します。

12cリリース2 (12.2)以降では、AQキュー表名の最大長は122バイトです。長い名前のキュー表を作成しようとすると、エラーORA-24019が発生します。

queue_payload_type

この必須パラメータは、ペイロード型をRAWまたはオブジェクト型として指定します。詳細は、「ペイロード型」を参照してください。

storage_clause

このオプション・パラメータは、キュー表の表領域を指定します。詳細は、「STORAGE句」を参照してください。

sort_list

このオプション・パラメータは、昇順でソート・キーとして使用される1つまたは2つの列を指定します。sort_column1,sort_column2という書式を使用します。詳細は、「ソート・キー」を参照してください。

multiple_consumers

このオプション・パラメータは、キュー表をシングル・コンシューマまたはマルチ・コンシューマとして指定します。デフォルトのFALSEは、表で作成されたキューにはメッセージごとに1つのコンシューマのみ指定できることを意味します。TRUEは、表で作成されたキューにはメッセージごとにマルチ・コンシューマを指定できることを意味します。

message_grouping

このオプション・パラメータは、メッセージがグループ化されるかどうかを指定します。デフォルトのNONEは、各メッセージが個別に処理されることを意味します。TRANSACTIONALは、1つのトランザクションでエンキューされるすべてのメッセージが同じグループの一部とみなされ、関連するメッセージのグループとしてデキューされることを意味します。

comment

このオプション・パラメータは、ユーザーが指定したキュー表の説明です。このユーザー・コメントは、キュー・カタログに追加されます。

auto_commit

TRUEの場合、現行のトランザクションがある場合は、CREATE_QUEUE_TABLE操作が実行される前にコミットされます。CREATE_QUEUE_TABLE操作は、コールから戻ると持続されます。これはデフォルトです。FALSEの場合、この操作は現行トランザクションの一部で、コール元がコミットを入力した場合のみ持続されます。

注意: このパラメータは非推奨となっています。

primary_instance

このオプション・パラメータは、キュー表の1次所有者を指定します。キュー・モニターのスケジューリングとキュー表内のキューの伝播は、このインスタンスで実行されます。デフォルト値の0は、キュー・モニターのスケジューリングと伝播が使用可能な任意のインスタンスで実行されることを意味します。

compatible8.1以上の場合のみ、このパラメータを指定および変更できます。

secondary_instance

このオプション・パラメータは、プライマリ・インスタンスが使用できない場合のキュー表の所有者を指定します。デフォルト値の0は、キュー表が使用可能な任意のインスタンスにフェイルオーバーされることを意味します。

primary_instanceも指定され、compatible8.1以上の場合のみ、このパラメータを指定して変更できます。

compatible

このオプション・パラメータは、そのキュー表が互換性を持つ最も低いデータベース・バージョンを指定します。可能な値は、8.08.1および10.0です。データベースが10.1互換モードの場合、デフォルト値は10.0です。データベースが8.1互換または9.2互換モードの場合、デフォルト値は8.1です。データベースが8.0互換モードの場合、デフォルト値は8.0です。値8.0は、Oracle Database Advanced Queuing 10gリリース2 (10.2)では非推奨になりました。

互換性の詳細は、「Oracle Database Advanced Queuingの互換性パラメータ」を参照してください。

secure

キュー表を保護キューに使用する場合は、このオプション・パラメータをTRUEに設定する必要があります。保護キューとは、エンキューやデキューなどのキュー操作を実行できる1人以上のデータベース・ユーザーに対して、AQエージェントを明示的に関連付ける必要があるキューのことです。保護キューの所有者は、キューですべてのキュー操作を実行できますが、その他のユーザーは、保護キュー・ユーザーとして構成されないかぎりキュー操作を実行できません。

replication_mode

将来の使用のために予約されています。キューがレプリケーション・モードで作成されている場合はDBMS_AQADM.REPLICATION_MODE、それ以外の場合はDBMS_AQADM.NONEです。デフォルトはDBMS_AQADM.NONEです。

ペイロード・タイプ

ペイロード型をオブジェクト型として指定するには、オブジェクト型を定義する必要があります。

注意:

オブジェクト型のシノニムを作成している場合、それをDBMS_AQADM.CREATE_QUEUE_TABLEで使用することはできません。エラーORA-24015が発生します。

CLOBBLOBおよびBFILEオブジェクトはOracle Database Advanced Queuingメッセージで有効です。これらのオブジェクト型は、Oracle8iリリース8.1.x以降のOracleソフトウェアを使用してOracle Database Advanced Queuing伝播で伝播できます。 LOBオブジェクト型エンキューするには、まずLOB_attributeEMPTY_BLOB()に設定した後に、エンキューを実行する必要があります。その後、キュー表のビューから生成されたLOBロケータを選択して標準のLOB操作を使用できます。

注意:

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

STORAGE句

storage_clause引数には、標準のCREATE TABLE storage_clause引数に使用できるテキストを入力できます。

表領域が指定されたキュー表では、索引構成表(IOT)および索引は、すべてその表領域に作成されます。現在、これらを異なる表領域間に分割することはできません。

注意:

11gリリース2 (11.2)のqmonプロセスでは、デキューIOT、履歴IOTおよびタイム・マネージャIOTの自動結合を実行します。手動でAQのIOTを結合する必要はありません。ただし、パフォーマンスの低下が見られる場合、回避策として実行することが可能です。

ローカル管理表領域にキュー表を作成するか、2つ以上の空きリスト・グループがあるキュー表を作成する場合、キュー・モニター・コーディネータはそのブロックのクリーン・アップをスキップします。これにより、時間の経過とともにパフォーマンスが低下する可能性があります。

デキューIOTを結合するには次を実行します。

ALTER TABLE AQ$_queue_table_I COALESCE;

このコマンドは、キューの同時デキュー元およびエンキュー元がある場合に実行できますが、コマンドの実行中に、同時ユーザーのパフォーマンスが若干低下する可能性があります。

ソート・キー

sort_listパラメータは、メッセージがデキューされる順序を決定します。キュー表を作成した後は、メッセージのソート順序を変更することはできません。選択肢は次のとおりです。

  • ENQ_TIME

  • ENQ_TIME,PRIORITY

  • PRIORITY

  • PRIORITY,ENQ_TIME

  • PRIORITY,COMMIT_TIME

  • COMMIT_TIME

COMMIT_TIMEを指定すると、キュー表を使用する任意のキューがコミット時間キューになり、Oracle Database Advanced Queuingは、トランザクションをコミットするときに、エンキューされたメッセージごとに近似CSCNを計算します。

COMMIT_TIMEをソート・キーとして指定する場合、次の値も指定する必要があります。

  • multiple_consumers = TRUE

  • message_grouping = TRANSACTIONAL

  • compatible = 8.1以上

コミット時間順序付けは、トランザクションが相互に依存している場合、またはキュー内のメッセージを参照するときに一貫した結果が必要な場合に便利です。

その他の表およびビュー

表の作成時に、次のオブジェクトが作成されます。

  • AQ$_queue_table_name: Oracle Database Advanced Queuingアプリケーションでキュー・データの問合せに使用される読込み専用のビュー

  • AQ$_queue_table_name_E: キュー表に対応付けられたデフォルトの例外キュー

  • AQ$_queue_table_name_I: マルチ・コンシューマ・キューの場合にデキュー操作に使用される索引または索引構成表(IOT)

  • AQ$_queue_table_name_T: キュー・モニター操作の索引

  • AQ$_queue_table_name_L: コミットされたデキュー操作のメッセージ識別子のキューの格納に使用されるデキュー・ログ表

次のオブジェクトは、8.1互換のマルチ・コンシューマ・キュー表でのみ作成されます。

  • AQ$_queue_table_name_S: サブスクライバに関する情報の格納に使用される表

  • AQ$_queue_table_name_H: デキュー履歴データの格納に使用される索引構成表(IOT)

注意:

Oracle Database Advanced Queuingでは、これらの内部AQのキュー表に対するトリガーの使用はサポートされていません。

スキーマを指定しない場合、デフォルトのスキーマはそのユーザーのスキーマになります。

GLOBAL_TOPIC_ENABLED = TRUEの場合は、キュー表が作成されると、対応するLightweight Directory Access Protocol(LDAP)エントリも作成されます。

キュー・タイプがANYDATAの場合、バッファ済キューと2つの追加オブジェクトが作成されます。バッファ済キューには、取得プロセスによって作成された論理変更レコードが格納されます。論理変更レコードがキューに関連付けられたメモリー・バッファにステージングされた場合、通常はディスクに書き込まれません。

デキューされずに一定の期間バッファ内でステージングされているか、すべての取得済イベントを保持するのに十分な空きがメモリーにない場合、論理変更レコードは次の表に流出します。

  • AQ$_queue_table_name_P: メモリーから流出した取得済イベントの格納に使用される表

  • AQ$_queue_table_name_D: 伝播に関する情報の格納と、各イベントの処理に適したプロセスの適用に使用される表

次の例では、SQL*Plusテスト環境を使用していることを前提にしています。例8-1では、この章にある他の例の準備としてユーザーを作成します。この例では、管理者権限を持つユーザーとして接続する必要があります。この章にある他の例のほとんどでは、ユーザーtest_admとして接続できます。いくつかの例は、DBMS_AQADMEXECUTE権限を使用してtestとして実行する必要があります。

例8-1 AQ管理ユーザーの設定

CREATE USER test_adm IDENTIFIED BY test_adm DEFAULT TABLESPACE example;
GRANT DBA, CREATE ANY TYPE TO test_adm; 
GRANT EXECUTE ON DBMS_AQADM TO test_adm;
GRANT aq_administrator_role TO test_adm;
BEGIN
   DBMS_AQADM.GRANT_SYSTEM_PRIVILEGE(
      privilege          =>    'MANAGE_ANY', 
      grantee            =>    'test_adm', 
      admin_option       =>     FALSE);
END;
/
CREATE USER test IDENTIFIED BY test;
GRANT EXECUTE ON dbms_aq TO test;

例8-2 AQ管理のサンプル・タイプの設定

CREATE TYPE test.message_typ AS object(
   sender_id              NUMBER,
   subject                VARCHAR2(30),
   text                   VARCHAR2(1000));
/
CREATE TYPE test.msg_table AS TABLE OF test.message_typ;
/
CREATE TYPE test.order_typ AS object(
   custno                 NUMBER,
   item                   VARCHAR2(30),
   description            VARCHAR2(1000));
/
CREATE TYPE test.lob_typ AS object(
   id                     NUMBER, 
   subject                VARCHAR2(100), 
   data                   BLOB, 
   trailer                NUMBER);
/ 

例8-3 オブジェクト型メッセージのキュー表の作成

BEGIN
   DBMS_AQADM.CREATE_QUEUE_TABLE(
      queue_table            => 'test.obj_qtab',
      queue_payload_type     => 'test.message_typ');
END;
/

例8-4 RAW型メッセージのキュー表の作成

BEGIN
   DBMS_AQADM.CREATE_QUEUE_TABLE( 
      queue_table            => 'test.raw_qtab', 
      queue_payload_type     => 'RAW'); 
END;
/

例8-5 LOB型メッセージのキュー表の作成

BEGIN
   DBMS_AQADM.CREATE_QUEUE_TABLE(
      queue_table            => 'test.lob_qtab',
      queue_payload_type     => 'test.lob_typ');
END;
/

例8-6 XMLTypeメッセージのキュー表の作成

BEGIN
  DBMS_AQADM.CREATE_QUEUE_TABLE(
     queue_table         => 'test.xml_qtab', 
     queue_payload_type  => 'SYS.XMLType',
     multiple_consumers  => TRUE, 
     compatible          => '8.1',
     comment             => 'Overseas Shipping multiconsumer orders queue table');
END;
/

例8-7 グループ化メッセージのキュー表の作成

BEGIN
   DBMS_AQADM.CREATE_QUEUE_TABLE( 
      queue_table          => 'test.group_qtab',
      queue_payload_type   => 'test.message_typ',
      message_grouping     => DBMS_AQADM.TRANSACTIONAL);
END;
/

例8-8 優先メッセージおよびマルチ・コンシューマのキュー表の作成

BEGIN
   DBMS_AQADM.CREATE_QUEUE_TABLE(
      queue_table            => 'test.priority_qtab', 
      queue_payload_type     => 'test.order_typ',
      sort_list              => 'PRIORITY,ENQ_TIME', 
      multiple_consumers     => TRUE);
   DBMS_AQADM.CREATE_QUEUE_TABLE(
      queue_table            => 'test.multiconsumer_qtab',
      queue_payload_type     => 'test.message_typ',
      sort_list              => 'PRIORITY,ENQ_TIME', 
      multiple_consumers     => TRUE);
END;
/

例8-9 コミット時間順序付けを使用したキュー表の作成

BEGIN
   DBMS_AQADM.CREATE_QUEUE_TABLE(
      queue_table            => 'test.commit_time_qtab',
      queue_payload_type     => 'test.message_typ',
      sort_list              => 'COMMIT_TIME', 
      multiple_consumers     => TRUE, 
      message_grouping       => DBMS_AQADM.TRANSACTIONAL,
      compatible             => '10.0');
END;
/

例8-10 マルチ・コンシューマの8.1互換キュー表の作成

BEGIN
   DBMS_AQADM.CREATE_QUEUE_TABLE(
      queue_table            => 'test.multiconsumer_81_qtab',
      queue_payload_type     => 'test.message_typ',
      multiple_consumers     =>  TRUE,
      compatible             => '8.1'); 
END;
/

例8-11 指定した表領域に対するキュー表の作成

BEGIN
   DBMS_AQADM.CREATE_QUEUE_TABLE( 
      queue_table        => 'test.example_qtab',
      queue_payload_type => 'test.message_typ',
      storage_clause     => 'tablespace example');
END;
/

例8-12 空きリストまたは空きリスト・グループがあるキュー表の作成

BEGIN 
   DBMS_AQADM.CREATE_QUEUE_TABLE( 
      queue_table            => 'test.freelist_qtab', 
      queue_payload_type     => 'RAW', 
      storage_clause         => 'STORAGE (FREELISTS 4 FREELIST GROUPS 2)',
      compatible             => '8.1');
END;
/

キュー表の変更

DBMS_AQADM.ALTER_QUEUE_TABLEは、非シャード・キュー表の既存のプロパティを変更します。

DBMS_AQADM.ALTER_QUEUE_TABLE (
   queue_table          IN   VARCHAR2, 
   comment              IN   VARCHAR2       DEFAULT NULL,
   primary_instance     IN   BINARY_INTEGER DEFAULT NULL, 
   secondary_instance   IN   BINARY_INTEGER DEFAULT NULL
   replication_mode     IN   BINARY_INTEGER DEFAULT NULL);
パラメータ 説明

queue_table

この必須パラメータは、キュー表名を指定します。

comment

このオプション・パラメータは、ユーザーが指定したキュー表の説明です。このユーザー・コメントは、キュー・カタログに追加されます。

primary_instance

このオプション・パラメータは、キュー表の1次所有者を指定します。キュー・モニターのスケジューリングとキュー表内のキューの伝播は、このインスタンスで実行されます。

compatible8.1以上の場合のみ、このパラメータを指定および変更できます。

secondary_instance

このオプション・パラメータは、プライマリ・インスタンスが使用できない場合のキュー表の所有者を指定します。

primary_instanceも指定され、compatible8.1以上の場合のみ、このパラメータを指定して変更できます。

replication_mode

将来の使用のために予約されています。キューがレプリケーション・モードで変更されている場合はDBMS_AQADM.REPLICATION_MODE、それ以外の場合はDBMS_AQADM.NONEです。デフォルト値はNULLです。

注意:

一般に、キュー表ではDDL文はサポートされていないため、キュー表が操作不可能になる場合があります。たとえば、キュー表に対してALTER TABLE ...SHRINK文を発行すると、内部エラーが発生し、その後キュー表を使用しようとしても、常にエラーになります。キュー表ではDDL文を使用しないことをお薦めします。

GLOBAL_TOPIC_ENABLED = TRUEの場合は、キュー表が変更されると、対応するLDAPエントリも変更されます。

例8-13 プライマリおよびセカンダリ・インスタンスの変更によるキュー表の変更

BEGIN
   DBMS_AQADM.ALTER_QUEUE_TABLE( 
      queue_table          => 'test.obj_qtab', 
      primary_instance     => 3, 
      secondary_instance   => 2);
END;
/

例8-14 コメントの変更によるキュー表の変更

BEGIN
   DBMS_AQADM.ALTER_QUEUE_TABLE( 
      queue_table          => 'test.obj_qtab', 
      comment              => 'revised usage for queue table');
END;
/

キュー表の削除

DBMS_AQADM.DROP_QUEUE_TABLEは、既存の非シャード・キュー表を削除します。

DBMS_AQADM.DROP_QUEUE_TABLE(
   queue_table       IN    VARCHAR2,
   force             IN    BOOLEAN DEFAULT FALSE,

キュー表を削除する前に、そのキュー表内のすべてのキューを停止して削除する必要があります。forceFALSEに設定されている場合、明示的に実行する必要があります。forceTRUEに設定されている場合、キュー表内のすべてのキューと関連付けられた伝播スケジュールが自動的に削除されます。

GLOBAL_TOPIC_ENABLED = TRUEの場合は、キュー表が削除されると、対応するLDAPエントリも削除されます。

例8-15 キュー表の削除

BEGIN
   DBMS_AQADM.DROP_QUEUE_TABLE(
      queue_table        => 'test.obj_qtab');
END;
/

例8-16 forceオプションを使用したキューの削除

BEGIN
   DBMS_AQADM.DROP_QUEUE_TABLE( 
      queue_table        => 'test.raw_qtab', 
      force              => TRUE); 
END;
/

キュー表のパージ

DBMS_AQADM.PURGE_QUEUE_TABLEは、非シャード・キュー表からメッセージをパージします。

DBMS_AQADM.PURGE_QUEUE_TABLE(
   queue_table        IN   VARCHAR2,
   purge_condition    IN   VARCHAR2,
   purge_options      IN   aq$_purge_options_t);

次のパラメータがあります。

パラメータ 説明

queue_table

この必須パラメータは、キュー表名を指定します。

purge_condition

パージ条件には、大文字と小文字を区別するSQLのWHERE句を使用する必要があります。条件はaq$queue_table_nameビューの列に基づいています。パージ条件の各列名には、「qtview」という接頭辞が付きます。

永続メッセージでサポートされるパージ条件はすべて、バッファ済メッセージでもサポートされます。

キュー表のすべてのキューをパージするには、purge_conditionNULL(引用符を使用しない)または''(一重引用符2つ)に設定します。

purge_options

aq$_purge_options_t型にはblockパラメータが含まれます。blockTRUEの場合、キュー表をパージする間、キュー表内のすべてのキューで排他的ロックが保持されます。これにより、キュー表のパージ時にエンキュー実行者とデキュー実行者が同時にブロックされます。blockTRUEの場合、パージ・コールは常に成功します。blockのデフォルトはFALSEです。この場合、エンキュー実行者とデキュー実行者はブロックされませんが、同時実行回数が多いと、パージがエラーによって失敗する可能性があります。

aq$_purge_options_t型にはdelivery_modeパラメータも含まれます。デフォルトのPERSISTENTの場合は、永続メッセージのみがパージされます。BUFFEREDに設定されている場合は、バッファ済メッセージのみがパージされます。PERSISTENT_OR_BUFFEREDに設定されている場合は、両方がパージされます。

このプロシージャを実行すると、トレース・ファイルがudumpの宛先に生成されます。プロシージャの実行内容の詳細が示されます。このプロシージャはすべてのメッセージの処理後にコミットされます。

関連項目:

DBMS_AQADM.PURGE_QUEUE_TABLEの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』のDBMS_AQADMに関する項を参照してください。

注意:

例8-20consumer_name例8-21sender_nameなど、一部のパージ条件は、8.1互換のキュー表でのみサポートされています。詳細については、表9-1を参照してください。

例8-17 キュー表のすべてのメッセージのパージ

DECLARE
po dbms_aqadm.aq$_purge_options_t;
BEGIN
   po.block := FALSE;
   DBMS_AQADM.PURGE_QUEUE_TABLE(
     queue_table     => 'test.obj_qtab',
     purge_condition => NULL,
     purge_options   => po);
END;
/

例8-18 指定したキューのすべてのメッセージのパージ

DECLARE
po dbms_aqadm.aq$_purge_options_t;
BEGIN
   po.block := TRUE;
   DBMS_AQADM.PURGE_QUEUE_TABLE(
     queue_table     => 'test.obj_qtab',
     purge_condition => 'qtview.queue = ''TEST.OBJ_QUEUE''',
     purge_options   => po);
END;
/

例8-19 指定したキューのすべてのPROCESSEDメッセージのパージ

DECLARE
po dbms_aqadm.aq$_purge_options_t;
BEGIN
   po.block := TRUE;
   DBMS_AQADM.PURGE_QUEUE_TABLE(
     queue_table     => 'test.obj_qtab',
     purge_condition => 'qtview.queue = ''TEST.OBJ_QUEUE'' 
                         and qtview.msg_state = ''PROCESSED''',
     purge_options   => po);
END;
/

例8-20 指定したキューと指定したコンシューマのすべてのメッセージのパージ

DECLARE
po dbms_aqadm.aq$_purge_options_t;
BEGIN
   po.block := TRUE;
   DBMS_AQADM.PURGE_QUEUE_TABLE(
     queue_table     => 'test.multiconsumer_81_qtab',
     purge_condition => 'qtview.queue = ''TEST.MULTICONSUMER_81_QUEUE'' 
                         and qtview.consumer_name = ''PAYROLL_APP''',
     purge_options   => po);
END;
/

例8-21 指定した送信者からのすべてのメッセージの削除

DECLARE
po dbms_aqadm.aq$_purge_options_t;
BEGIN
   po.block := TRUE;
   DBMS_AQADM.PURGE_QUEUE_TABLE(
     queue_table     => 'test.multiconsumer_81_qtab',
     purge_condition => 'qtview.sender_name = ''TEST.OBJ_QUEUE''',
     purge_options   => po);
END;
/

キュー表の移行

DBMS_AQADM.MIGRATE_QUEUE_TABLEは、非シャード・キュー表を8.0、8.1または10.0から8.0、8.1または10.0に移行します。移行を実行できるのは、キュー表の所有者のみです。

DBMS_AQADM.MIGRATE_QUEUE_TABLE(
   queue_table   IN   VARCHAR2,
   compatible    IN   VARCHAR2);

注意:

このプロシージャでは、キュー表の所有者(通常のキュー・ユーザー)にDBMS_AQADMEXECUTE権限を付与する必要があります。通常のキュー・ユーザーに対してキューおよびキュー表の作成と削除、サブスクライバの追加と削除などを許可しない場合は、移行完了の直後にEXECUTE権限を取り消す必要があります。

注意:

compatible8.0に設定されているキュー表で作成されたキュー(このマニュアルでは8.0形式のキューと呼びます)は、Oracle Database Advanced Queuing 10gリリース2 (10.2)では非推奨になっています。したがって、新しいキューの作成には8.1以降の形式を使用し、既存の8.0形式のキューをなるべく早く移行することをお薦めします。

スキーマが下位リリースからエクスポートされたダンプのインポートによって作成された場合、またはスキーマに下位リリースからアップグレードされたOracle Database Advanced Queuingキューがある場合は、DROP USER CASCADEを使用してスキーマを削除しようとすると、ORA-24005エラーが発生します。このようなスキーマを削除するには、次の手順に従います。

  1. イベント10851をレベル1に設定します。
  2. AQ$_queue_table_name_NRという形式のすべての表をスキーマから削除します。
  3. イベント10851をオフにします。
  4. スキーマを削除します。

例8-22 8.1互換から10.0互換へのキュー表のアップグレード

BEGIN
   DBMS_AQADM.MIGRATE_QUEUE_TABLE (
           queue_table    => 'test.xml_qtab', 
           compatible     => '10.0');
END;
/

非シャード・キューの管理

次のトピックでは、非シャード・キューを管理する方法について説明します。

注意:

シャード・キューの開始および停止では、非シャード・キューと同じAPIを使用します。

キューの作成

DBMS_AQADM.CREATE_QUEUEは非シャード・キューを作成します。

DBMS_AQADM.CREATE_QUEUE(
   queue_name          IN       VARCHAR2,
   queue_table         IN       VARCHAR2,
   queue_type          IN       BINARY_INTEGER DEFAULT NORMAL_QUEUE,
   max_retries         IN       NUMBER         DEFAULT NULL,
   retry_delay         IN       NUMBER         DEFAULT 0,
   retention_time      IN       NUMBER         DEFAULT 0,
   dependency_tracking IN       BOOLEAN        DEFAULT FALSE,
   comment             IN       VARCHAR2       DEFAULT NULL,

次のパラメータがあります。

パラメータ 説明

queue_name

この必須パラメータは、新しいキューの名前を指定します。

データベースの互換性が10.0である場合のみ、大文字と小文字が混在するキュー名を指定できますが、名前を二重引用符で囲む必要があります。したがって、abc.efgは、スキーマがABCで名前がEFGであることを示しますが、"abc"."efg"はスキーマがabcで名前がefgであることを示します。

12cリリース2 (12.2)以降では、ユーザーが生成するキュー名の最大長は122バイトです。長い名前のキューを作成しようとすると、エラーORA-24019が発生します。「その他の表およびキュー」にリストされているキュー名など、Oracle Database Advanced Queuingで生成されたキュー名は、128文字より長くできません。

queue_table

この必須パラメータは、キューが作成されるキュー表を指定します。

queue_type

このパラメータは、作成されるキューのタイプを指定します。デフォルトのNORMAL_QUEUEは、通常のキューを作成します。EXCEPTION_QUEUEは、例外キューを生成します。

max_retries

このパラメータは、メッセージに対するREMOVEモードのデキューの試行回数を制限します。max_retriesの最大値は2**31 -1です。

retry_delay

このパラメータは、アプリケーションのロールバック後、スケジュールされたメッセージの再処理が行われるまでの時間を秒単位で指定します。デフォルトは0(ゼロ)で、メッセージを最も迅速に取り出せます。このパラメータは、max_retriesが0(ゼロ)に設定されている場合は無効です。

このパラメータは、シングル・コンシューマ・キューおよび8.1形式以上のマルチ・コンシューマ・キューではサポートされていますが、8.0形式のマルチ・コンシューマ・キュー(Oracle Database Advanced Queuing 10gリリース2 (10.2)では非推奨)ではサポートされていません。

retention_time

このパラメータは、キューからデキューされた後、メッセージがキュー表内に保持される秒数を指定します。retention_timeが期限切れになると、メッセージはタイム・マネージャ・プロセスによって削除されます。INFINITEは、メッセージが永久に保持されることを意味します。デフォルトは0(ゼロ)で、保持されません。

dependency_tracking

このパラメータは、将来の使用に備えて確保されています。FALSEがデフォルトです。このリリースでは、TRUEは使用できません。

comment

このオプション・パラメータは、ユーザーが指定したキューの説明です。このユーザー・コメントは、キュー・カタログに追加されます。

すべてのキュー名は、スキーマ内において一意である必要があります。キューは、CREATE_QUEUEで作成した後、START_QUEUEをコールすると有効になります。デフォルトでは、キューはエンキューおよびデキューともに使用禁止で作成されます。保存されているメッセージを参照するには、メッセージIDによってデキューするか、またはSQLを使用します。GLOBAL_TOPIC_ENABLED = TRUEの場合は、キューが作成されると、対応するLDAPエントリも作成されます。

次の例(例8-23から例8-30)は、例8-1から例8-12で作成したデータ構造を使用しています。

例8-23 オブジェクト型メッセージのキューの作成

BEGIN
   DBMS_AQADM.CREATE_QUEUE(
      queue_name         =>  'test.obj_queue',
      queue_table        =>  'test.obj_qtab');
END;
/

例8-24 RAW型メッセージのキューの作成

BEGIN
   DBMS_AQADM.CREATE_QUEUE( 
      queue_name          => 'test.raw_queue', 
      queue_table         => 'test.raw_qtab'); 
END;
/

例8-25 LOB型メッセージのキューの作成

BEGIN
   DBMS_AQADM.CREATE_QUEUE( 
      queue_name          => 'test.lob_queue', 
      queue_table         => 'test.lob_qtab'); 
END;
/

例8-26 グループ化メッセージのキューの作成

BEGIN
   DBMS_AQADM.CREATE_QUEUE( 
      queue_name          => 'test.group_queue', 
      queue_table         => 'test.group_qtab'); 
END;
/

例8-27 優先メッセージのキューの作成

BEGIN
   DBMS_AQADM.CREATE_QUEUE(
      queue_name         => 'test.priority_queue', 
      queue_table        => 'test.priority_qtab');
END;
/

例8-28 優先メッセージおよびマルチ・コンシューマのキューの作成

BEGIN
   DBMS_AQADM.CREATE_QUEUE(
      queue_name         => 'test.multiconsumer_queue',
      queue_table        => 'test.multiconsumer_qtab');
END;
/

例8-29 伝播のデモ用のキューの作成

BEGIN
   DBMS_AQADM.CREATE_QUEUE(
      queue_name        => 'test.another_queue',
      queue_table       => 'test.multiconsumer_qtab');
END;
/

例8-30 マルチ・コンシューマの8.1形式キューの作成

BEGIN
   DBMS_AQADM.CREATE_QUEUE( 
      queue_name         => 'test.multiconsumer_81_queue', 
      queue_table        => 'test.multiconsumer_81_qtab'); 
END;
/

キューの変更

DBMS_AQADM.ALTER_QUEUEは、非シャード・キューの既存のプロパティを変更します。

DBMS_AQADM.ALTER_QUEUE(
   queue_name        IN    VARCHAR2,
   max_retries       IN    NUMBER   DEFAULT NULL,
   retry_delay       IN    NUMBER   DEFAULT NULL,
   retention_time    IN    NUMBER   DEFAULT NULL,
   comment           IN    VARCHAR2 DEFAULT NULL);

max_retriescommentretry_delayおよびretention_timeのみ変更できます。保存されているメッセージを参照するには、メッセージIDによってデキューするか、またはSQLを使用します。GLOBAL_TOPIC_ENABLED = TRUEの場合は、キューが変更されると、対応するLDAPエントリも変更されます。

次の例は、保存時間を変更して、デキュー後1日間メッセージを保存します。

例8-31 保存時間の変更によるキューの変更

BEGIN
   DBMS_AQADM.ALTER_QUEUE( 
      queue_name        => 'test.another_queue', 
      retention_time    => 86400);
END;
/

キューの開始

DBMS_AQADM.START_QUEUEは、指定した非シャード・キューでのエンキューまたはデキューを有効にします。

DBMS_AQADM.START_QUEUE( 
   queue_name      IN     VARCHAR2,
   enqueue         IN     BOOLEAN DEFAULT TRUE,
   dequeue         IN     BOOLEAN DEFAULT TRUE);

管理者は、キューを作成した後、START_QUEUEを使用してそのキューを有効にする必要があります。デフォルトでは、エンキューおよびデキューの両方が有効になります。例外キューでは、デキュー操作のみ許可されます。この操作は、コールが完了し、コールにトランザクションの特性がない場合にのみ有効になります。

例8-32 エンキューおよびデキューの両方を有効にしたキューの開始

BEGIN
   DBMS_AQADM.START_QUEUE (
      queue_name         => 'test.obj_queue');
END;
/

例8-33 デキューのみのキューの開始

BEGIN
   DBMS_AQADM.START_QUEUE( 
      queue_name         => 'test.raw_queue', 
      dequeue            => TRUE, 
      enqueue            => FALSE); 
END;
/

キューの停止

DBMS_AQADM.STOP_QUEUEは、指定した非シャード・キューでのエンキュー、デキューまたはその両方を無効にします。

DBMS_AQADM.STOP_QUEUE(
   queue_name      IN   VARCHAR2,
   enqueue         IN   BOOLEAN DEFAULT TRUE,
   dequeue         IN   BOOLEAN DEFAULT TRUE,
   wait            IN   BOOLEAN DEFAULT TRUE);

デフォルトでは、このコールによってエンキューおよびデキューの両方が無効になります。キューに対する未処理のトランザクションがある場合、キューは停止できません。この操作はコールが完了すると有効になり、トランザクションの特性はありません。

例8-34 キューの停止

BEGIN
   DBMS_AQADM.STOP_QUEUE(
      queue_name        => 'test.obj_queue');
END;
/

キューの削除

このプロシージャは、既存の非シャード・キューを削除します。あらかじめSTOP_QUEUEがコールされ、キューがエンキューおよびデキューの両方に対して無効にされていないかぎり、DROP_QUEUEは許可されません。すべてのキュー・データが、削除操作の一部として削除されます。

DBMS_AQADM.DROP_QUEUE(
   queue_name        IN    VARCHAR2,

GLOBAL_TOPIC_ENABLED = TRUEの場合は、キューが削除されると、対応するLDAPエントリも削除されます。

例8-35 標準キューの削除

BEGIN
   DBMS_AQADM.DROP_QUEUE(
      queue_name         => 'test.obj_queue');
END;
/

シャード・キューの管理

次のトピックでは、シャード・キューを管理する方法について説明します。

注意:

シャード・キューの開始および停止では、非シャード・キューと同じAPIを使用します。

シャード・キューの作成

CREATE_SHARDED_QUEUE APIはシャード・キューを作成します。

PROCEDURE CREATE_SHARDED_QUEUE (
	queue_name             IN VARCHAR2,
	storage_clause         IN VARCHAR2       DEFAULT NULL,
	multiple_consumers     IN BOOLEAN        DEFAULT FALSE,
	max_retries            IN NUMBER         DEFAULT NULL,
	comment                IN VARCHAR2       DEFAULT NULL, 
	queue_payload_type     IN VARCHAR2       DEFAULT JMS_TYPE,
	queue_properties       IN QUEUE_PROPS_T  DEFAULT NULL,
	replication_mode       IN BINARY_INTEGER DEFAULT NONE);

次のパラメータがあります。

パラメータ 説明

queue_name

この必須パラメータは、新しいキューの名前を指定します。最大で128文字まで使用できます。

storage_clause

記憶域パラメータは、キュー表の作成時に、CREATE TABLE文に組み込まれます。storage_clause引数には、標準のCREATE TABLE storage_clause引数に使用できるテキストを入力できます。記憶域パラメータは次のパラメータの任意の組合せで構成できます: PCTFREEPCTUSEDINITRANSMAXTRANSTABLESPACELOBおよび表のSTORAGE句。

ここで表領域が指定されない場合は、キュー表とそのすべての関連オブジェクトが、デフォルトのユーザー表領域に作成されます。ここで表領域が指定されると、キュー表とそのすべての関連オブジェクトが、STORAGE句で指定された表領域に作成されます。これらのパラメータの使用方法は、『Oracle Database SQL言語リファレンス』を参照してください。

multiple_consumers

FALSEの場合、各メッセージに対してコンシューマを1つのみ設定できます。これはデフォルトです。TRUEは、表で作成されたキューにはメッセージごとにマルチ・コンシューマを指定できることを意味します。

max_retries

このオプション・パラメータは、メッセージのデキューに失敗した後に再試行できる回数を制限します。max_retriesの最大値は2**31 -1です。再試行の制限を超えると、メッセージがキューからパージされます。デキューの実行後にアプリケーションがロールバックを発行するたびに、RETRY_COUNTが増加します。サーバー・プロセスの停止(ALTER SYSTEM KILL SESSION)またはインスタンスのSHUTDOWN ABORTによって、デキュー・トランザクションが失敗した場合は、RETRY_COUNTは増加しません。

comment

このオプション・パラメータは、ユーザーが指定したキュー表の説明です。このユーザー・コメントは、キュー・カタログに追加されます。

queue_payload_type

ペイロードは、RAWDBMS_AQADM.JMS_TYPEまたはオブジェクト・タイプにすることができます。デフォルトはDBMS_AQADM.JMS_TYPEです。

queue_properties

通常キューまたは例外キュー、再試行の遅延、保持時間、ソート・リスト、キャッシュ・ヒントなどのプロパティ。

queue_propertiesの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

replication_mode

将来の使用のために予約されています。キューがレプリケーション・モードで作成されている場合はDBMS_AQADM.REPLICATION_MODE、それ以外の場合はDBMS_AQADM.NONEです。デフォルトはDBMS_AQADM.NONEです。

シャード・キューの削除

このプロシージャは、データベース・キューイング・システムから既存の共有されているキューを削除します。DROP_SHARDED_QUEUEをコールする前に、キューを停止する必要があります。forceをFALSEに設定した場合、ユーザーはDROP_SHARDED_QUEUEをコールする前にキューを明示的に停止する必要があります。forceをTRUEに設定した場合、キューは内部的に停止されてから削除されます。

構文

DBMS_AQADM.DROP_SHARDED_QUEUE( 
       queue_name IN VARCHAR2, 
       force      IN BOOLEAN DEFAULT FALSE )

パラメータ

表8-1 CREATE_SHARDED_QUEUEプロシージャのパラメータ

パラメータ 説明

queue_name

この必須パラメータは、共有されているキューの名前を指定します。

force

キューが停止されていない場合でも、共有されているキューは削除されます。

シャード・キューの変更

このプロシージャを使用すると、ユーザーはシャード・キューのqueue_propertiesを変更できます。

構文

PROCEDURE ALTER_SHARDED_QUEUE(
    queue_name             IN VARCHAR2,
    max_retries            IN NUMBER         DEFAULT NULL,
    comment                IN VARCHAR2       DEFAULT NULL,
    queue_properties       IN QUEUE_PROPS_T  DEFAULT NULL,
    replication_mode       IN BINARY_INTEGER DEFAULT NULL);

パラメータ

表8-2 ALTER_SHARDED_QUEUEプロシージャのパラメータ

パラメータ 説明

queue_name

このパラメータは、シャード・キューの名前を指定します。最大で128文字まで使用できます。

max_retries

許可される最大試行数。

comment

パラメータのコメント。

queue_properties

通常キューまたは例外キュー、再試行の遅延、保持時間、ソート・リスト、キャッシュ・ヒントなどのプロパティ。

queue_propertiesの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

replication_mode

将来の使用のために予約されています。キューがレプリケーション・モードで変更されている場合はDBMS_AQADM.REPLICATION_MODE、それ以外の場合はDBMS_AQADM.NONEです。デフォルトはNULLです。

キューのパラメータの設定

このプロシージャを使用すると、ユーザーはキュー・レベルまたはデータベース・レベルでシャード・キューに各種のパラメータを設定できます。データベース・レベルの場合、queue_nameNULLである必要があります。キューによってデータベース・レベルのパラメータ値が上書きされます。

構文

  PROCEDURE  SET_QUEUE_PARAMETER(
    queue_name          IN VARCHAR2,
    param_name          IN VARCHAR2,
    param_value         IN NUMBER);

パラメータ

表8-3 SET_QUEUE_PARAMETERプロシージャのパラメータ

パラメータ 説明

queue_name

シャード・キューの名前。

param_name

パラメータ名。

param_value

パラメータの値。

キューのパラメータの設定解除

このプロシージャを使用すると、ユーザーはキュー・レベルまたはデータベース・レベルでシャード・キューの各種のパラメータを設定解除できます。データベース・レベルの場合、queue_nameNULLである必要があります。キューによってデータベース・レベルのパラメータ値が上書きされます。

構文

  PROCEDURE  UNSET_QUEUE_PARAMETER(
    queue_name          IN VARCHAR2,
    param_name          IN VARCHAR2);

パラメータ

表8-4 UNSET_QUEUE_PARAMETERプロシージャのパラメータ

パラメータ 説明

queue_name

シャード・キューの名前。

param_name

パラメータ名。

キューのパラメータの取得

このプロシージャを使用すると、ユーザーはキュー・レベルまたはデータベース・レベルでシャード・キューの各種のパラメータを取得できます。データベース・レベルの場合、queue_nameNULLである必要があります。キューによってデータベース・レベルのパラメータ値が上書きされます。

構文

  PROCEDURE  GET_QUEUE_PARAMETER(
    queue_name          IN VARCHAR2,
    param_name          IN VARCHAR2,
    param_value         OUT NUMBER);

パラメータ

表8-5 GET_QUEUE_PARAMETERプロシージャのパラメータ

パラメータ 説明

queue_name

シャード・キューの名前。

param_name

パラメータ名。

param_value

パラメータの値。

例外キューの作成

このプロシージャを使用すると、ユーザーはシャード・キューの例外キューを作成できます。

構文

  PROCEDURE CREATE_EXCEPTION_QUEUE(
    sharded_queue_name     IN VARCHAR2,
    exception_queue_name   IN VARCHAR2 DEFAULT NULL
    );

パラメータ

表8-6 CREATE_EXCEPTION_QUEUEプロシージャのパラメータ

パラメータ 説明

sharded_queue_name

シャード・キューの名前。

exception_queue_name

例外キューの名前を指定します。

変換の管理

変換はメッセージのフォーマットを変更するため、あるアプリケーションによって作成されたメッセージを、別のアプリケーションで認識できます。永続メッセージとバッファ済メッセージの両方で変換を使用できます。次のトピックでは、キュー表を管理する方法について説明します。

注意:

シャード・キューは変換をサポートしていません。

変換の作成

DBMS_TRANSFORM.CREATE_TRANSFORMATIONは、メッセージ・フォーマットの変換を作成します。

DBMS_TRANSFORM.CREATE_TRANSFORMATION(
    schema               VARCHAR2(30),
    name                 VARCHAR2(30),
    from_schema          VARCHAR2(30),
    from_type            VARCHAR2(30),
    to_schema            VARCHAR2(30),
    to_type              VARCHAR2(30),
    transformation       VARCHAR2(4000)); 

変換は、入力の型がfrom_typeで、to_type型のオブジェクトを返すSQLファンクションである必要があります。また、to_type型でfrom_typeを参照するSQL式も使用できます。from_typeに対するすべての参照は、source.user_dataという形式である必要があります。

この機能を使用するには、dbms_transformに対するEXECUTE権限が必要です。この権限は、AQ_ADMINISTRATOR_ROLEに含まれています。

また、変換のソース・タイプおよび宛先タイプであるユーザー定義型に対するEXECUTE権限、および変換ファンクションで使用するすべてのPL/SQLファンクションに対するEXECUTE権限も必要です。変換では、データベースの状態の書込み(DML操作の実行)、カレント・トランザクションのコミットまたはロールバックはできません。

例8-36 変換の作成

BEGIN
   DBMS_TRANSFORM.CREATE_TRANSFORMATION(
      schema         => 'test',
      name           => 'message_order_transform', 
      from_schema    => 'test',
      from_type      => 'message_typ', 
      to_schema      => 'test',
      to_type        => 'order_typ',
      transformation => 'test.order_typ(
         source.user_data.sender_id,
         source.user_data.subject,
         source.user_data.text)');
END;
/

関連項目:

管理者およびユーザー・ロールの詳細は、「Oracle Database Advanced Queuingのセキュリティ」を参照してください。

変換の変更

DBMS_TRANSFORM.MODIFY_TRANSFORMATIONは、変換ファンクションを変更して、ターゲット型の各属性ごとに変換を指定します。

DBMS_TRANSFORM.MODIFY_TRANSFORMATION(
    schema            VARCHAR2(30),
    name              VARCHAR2(30),
    attribute_number  INTEGER,
    transformation    VARCHAR2(4000));

属性の番号が0(ゼロ)に指定された場合、変換式は単純にソース・タイプからターゲット型への変換を定義します。

from_typeに対するすべての参照は、source.user_dataという形式である必要があります。ソース・タイプの属性に対するすべての参照には、source.user_dataという接頭辞が付きます。

この機能を使用するには、dbms_transformに対するEXECUTE権限が必要です。また、変換のソース・タイプおよび宛先タイプであるユーザー定義型に対するEXECUTE権限、および変換ファンクションで使用するすべてのPL/SQLファンクションに対するEXECUTE権限も必要です。

変換の削除

DBMS_TRANSFORM.DROP_TRANSFORMATIONは変換を削除します。

DBMS_TRANSFORM.DROP_TRANSFORMATION (
    schema      VARCHAR2(30),
    name        VARCHAR2(30));

この機能を使用するには、dbms_transformに対するEXECUTE権限が必要です。また、変換のソース・タイプおよび宛先タイプであるユーザー定義型に対するEXECUTE権限、および変換ファンクションで使用するすべてのPL/SQLファンクションに対するEXECUTE権限も必要です。

権限の付与および取消し

次のトピックでは、権限を付与および取消しする方法について説明します。

Oracle Database Advanced Queuingシステム権限の付与

DBMS_AQADM.GRANT_SYSTEM_PRIVILEGEは、ユーザーおよびロールにOracle Database Advanced Queuingシステム権限を付与します。権限は、ENQUEUE_ANYDEQUEUE_ANYおよびMANAGE_ANYです。最初は、SYSおよびSYSTEMのみがこのプロシージャを正常に使用できます。

DBMS_AQADM.GRANT_SYSTEM_PRIVILEGE(
   privilege         IN    VARCHAR2,
   grantee           IN    VARCHAR2,
   admin_option      IN    BOOLEAN := FALSE);

ENQUEUE_ANY権限を付与されたユーザーは、データベース内の任意のキューにメッセージをエンキューできます。DEQUEUE_ANY権限を付与されたユーザーは、データベース内の任意のキューからメッセージをデキューできます。MANAGE_ANY権限を付与されたユーザーは、データベースのすべてのスキーマに対してDBMS_AQADMコールを実行できます。

注意:

Oracle Database 12cリリース2以降、SYS以外のユーザーがMANAGE_ANYENQUEUE_ANYおよびDEQUEUE_ANY権限でSYSが所有するキューにアクセスすることができなくなりました。

例8-37 AQシステム権限の付与

BEGIN
   DBMS_AQADM.GRANT_SYSTEM_PRIVILEGE(
      privilege          =>    'ENQUEUE_ANY', 
      grantee            =>    'test', 
      admin_option       =>     FALSE);
   DBMS_AQADM.GRANT_SYSTEM_PRIVILEGE(
      privilege          =>     'DEQUEUE_ANY', 
      grantee            =>     'test', 
      admin_option       =>      FALSE);
END;
/

Oracle Database Advanced Queuingシステム権限の取消し

DBMS_AQADM.REVOKE_SYSTEM_PRIVILEGEは、ユーザーおよびロールからOracle Database Advanced Queuingシステム権限を取り消します。権限は、ENQUEUE_ANYDEQUEUE_ANYおよびMANAGE_ANYです。

DBMS_AQADM.REVOKE_SYSTEM_PRIVILEGE(
   privilege         IN   VARCHAR2,
   grantee           IN   VARCHAR2);

システム権限のADMINオプションを選択的に取り消すことはできません。

ENQUEUE_ANY権限を付与されたユーザーは、データベース内の任意のキューにメッセージをエンキューできます。DEQUEUE_ANY権限を付与されたユーザーは、データベース内の任意のキューからメッセージをデキューできます。MANAGE_ANY権限を付与されたユーザーは、データベースのすべてのスキーマに対してDBMS_AQADMコールを実行できます。

注意:

Oracle Database 12cリリース2以降、SYS以外のユーザーがMANAGE_ANYENQUEUE_ANYおよびDEQUEUE_ANY権限でSYSが所有するキューにアクセスすることができなくなりました。

例8-38 AQシステム権限の取消し

BEGIN
   DBMS_AQADM.REVOKE_SYSTEM_PRIVILEGE(
      privilege          =>    'DEQUEUE_ANY', 
      grantee            =>    'test');
END;
/

キュー権限の付与

DBMS_AQADM.GRANT_QUEUE_PRIVILEGEは、ユーザーおよびロールにキューの権限を付与します。権限は、ENQUEUEDEQUEUEまたはALLです。初期設定では、キュー表の所有者のみがこのプロシージャを使用してそのキューの権限を付与できます。

DBMS_AQADM.GRANT_QUEUE_PRIVILEGE(
   privilege        IN    VARCHAR2,
   queue_name       IN    VARCHAR2,
   grantee          IN    VARCHAR2,
   grant_option     IN    BOOLEAN := FALSE);

注意:

このプロシージャでは、キュー表の所有者(通常のキュー・ユーザー)にDBMS_AQADMEXECUTE権限を付与する必要があります。通常のキュー・ユーザーに対してキューおよびキュー表の作成と削除、サブスクライバの追加と削除などを許可しない場合は、初期のGRANT_QUEUE_PRIVILEGEの完了直後にEXECUTE権限を取り消す必要があります。

例8-39 キュー権限の付与

BEGIN
   DBMS_AQADM.GRANT_QUEUE_PRIVILEGE (
      privilege     =>     'ALL', 
      queue_name    =>     'test.multiconsumer_81_queue',
      grantee       =>     'test_adm', 
      grant_option  =>      TRUE);
END;
/

キュー権限の取消し

DBMS_AQADM.REVOKE_QUEUE_PRIVILEGEは、ユーザーおよびロールからキューの権限を取り消します。この権限とは、ENQUEUEまたはDEQUEUEです。

DBMS_AQADM.REVOKE_QUEUE_PRIVILEGE (
   privilege         IN      VARCHAR2,
   queue_name        IN      VARCHAR2,
   grantee           IN      VARCHAR2);

権限を取り消すには、取消し実行者がその権限の付与者である必要があります。GRANTオプションによって伝播された権限は、付与者の権限が取り消されたときに取り消されます。

例8-40に示すように、権限受領者から特定のキューに関するデキュー権限を取り消して、エンキュー権限のみを付与しておくこともできます。

例8-40 デキュー権限の取消し

BEGIN
   DBMS_AQADM.REVOKE_QUEUE_PRIVILEGE(
      privilege     =>     'DEQUEUE', 
      queue_name    =>     'test.multiconsumer_81_queue', 
      grantee       =>     'test_adm');
END;

サブスクライバの管理

次のトピックでは、サブスクライバを管理する方法について説明します。

サブスクライバの追加

DBMS_AQADM.ADD_SUBSCRIBERは、キューにデフォルトのサブスクライバを追加します。

DBMS_AQADM.ADD_SUBSCRIBER (
   queue_name     IN    VARCHAR2,
   subscriber     IN    sys.aq$_agent,
   rule           IN    VARCHAR2 DEFAULT NULL,
   transformation IN    VARCHAR2 DEFAULT NULL,
   queue_to_queue IN    BOOLEAN DEFAULT FALSE,
   delivery_mode  IN    PLS_INTEGER DEFAULT PERSISTENT);

アプリケーションは、特定の受信者リストまたはデフォルトのサブスクライバ・リストに対してメッセージをエンキューできます。この操作は、マルチ・コンシューマが許可されているキューでのみ成功し、サブスクライバの合計は1024以下である必要があります。この操作はすぐに有効になり、この操作を含むトランザクションはコミットされます。このコール後に実行されたエンキュー要求は、新しいアクションを反映します。rule内のすべての文字列は、次のように、一重引用符で囲まれている必要があります。

rule   => 'PRIORITY <= 3 AND CORRID =  ''FROM JAPAN'''

ユーザー・データ・プロパティまたは属性は、オブジェクト・ペイロードのみに適用され、常に接頭辞としてtab.userdataを付ける必要があります。

GLOBAL_TOPIC_ENABLEDがTRUEの場合は、サブスクライバが作成されると、対応するLDAPエントリも作成されます。

デキューまたは伝播中に適用する変換の名前を指定します。変換は、DBMS_TRANSFORMパッケージを使用して作成します。

XMLType属性を持つペイロードを含むキューに対しては、XMLType.existsNode()メソッドおよびXMLType.extract()メソッドを含むルールを指定できます。

パラメータqueue_to_queueTRUEに設定されている場合、追加されたサブスクライバは、キューからキューへのサブスクライバです。ソース・キューと宛先キューの間にキューからキューへの伝播が設定されている場合、キューからキューへのサブスクライバは、その伝播スケジュールによってメッセージを受信します。

delivery_modeパラメータがデフォルトのPERSISTENTの場合、サブスクライバは永続メッセージのみを受信します。BUFFEREDに設定されている場合、サブスクライバはバッファ済メッセージのみを受信します。PERSISTENT_OR_BUFFEREDに設定されている場合、サブスクライバは両方のタイプを受信します。ALTER_SUBSCRIBERを使用してこのパラメータを変更することはできません。

宛先キューがシングル・コンシューマ・キューの場合、エージェント名は、NULLである必要があります。

注意:

ADD_SUBSCRIBERはキューに対する管理操作です。Oracle Database AQでは、アプリケーションによる管理コールおよび操作コールの同時発行が可能ですが、実行は逐次行われます。ADD_SUBSCRIBERは、メッセージをエンキューまたはデキューしている保留中のコールが完了するまでブロックします。保留中のトランザクションの完了は待機しません。

例8-41 データベース・リンクの指定されたキューでのサブスクライバの追加

DECLARE 
   subscriber          sys.aq$_agent; 
BEGIN 
   subscriber := sys.aq$_agent('subscriber1', 'test2.msg_queue2@london', null); 
   DBMS_AQADM.ADD_SUBSCRIBER(
      queue_name         => 'test.multiconsumer_81_queue', 
      subscriber         =>  subscriber); 
END;
/

例8-42 データベース・リンクへのサブスクライバとしてのシングル・コンシューマ・キューの追加

DECLARE 
   subscriber          sys.aq$_agent; 
BEGIN 
   subscriber := sys.aq$_agent('subscriber1', 'test2.msg_queue2@london', null); 
   DBMS_AQADM.ADD_SUBSCRIBER(
      queue_name         => 'test.multiconsumer_81_queue', 
      subscriber         =>  subscriber); 
END;
/

例8-43 ルールを使用したサブスクライバの追加

DECLARE 
   subscriber       sys.aq$_agent; 
BEGIN 
   subscriber := sys.aq$_agent('subscriber2', 'test2.msg_queue2@london', null); 
   DBMS_AQADM.ADD_SUBSCRIBER(
      queue_name =>  'test.multiconsumer_81_queue', 
      subscriber =>   subscriber, 
      rule       =>  'priority < 2'); 
END;
/

例8-44 サブスクライバの追加と変換の指定

DECLARE 
   subscriber       sys.aq$_agent; 
BEGIN 
   subscriber := sys.aq$_agent('subscriber3', 'test2.msg_queue2@london', null); 
   DBMS_AQADM.ADD_SUBSCRIBER(
      queue_name     => 'test.multiconsumer_81_queue', 
      subscriber     =>  subscriber, 
      transformation => 'test.message_order_transform');
END;
/

例8-45 マルチ・コンシューマ・キューからシングル・コンシューマ・キューへの伝播

DECLARE 
   subscriber          SYS.AQ$_AGENT; 
BEGIN 
  subscriber := SYS.AQ$_AGENT(NULL, 'test2.single_consumer__queue@london', 
null); 
  DBMS_AQADM.ADD_SUBSCRIBER( 
      queue_name         => 'test.multiconsumer_81_queue', 
      subscriber         =>  subscriber); 
END; 

サブスクライバの変更

DBMS_AQADM.ALTER_SUBSCRIBERは、指定したキューに対するサブスクライバの既存プロパティを変更します。

DBMS_AQADM.ALTER_SUBSCRIBER (
   queue_name     IN    VARCHAR2,
   subscriber     IN    sys.aq$_agent,
   rule           IN    VARCHAR2
   transformation IN    VARCHAR2);

ルールまたは変換(あるいはその両方)を変更できます。これらの属性のいずれか1つのみを変更する場合は、他の属性の既存の値を変更コールに指定します。GLOBAL_TOPIC_ENABLED = TRUEの場合は、サブスクライバが変更されると、対応するLDAPエントリが作成されます。

例8-46 サブスクライバ・ルールの変更

DECLARE 
   subscriber       sys.aq$_agent; 
BEGIN 
   subscriber := sys.aq$_agent('subscriber2', 'test2.msg_queue2@london', null); 
   DBMS_AQADM.ALTER_SUBSCRIBER(
      queue_name => 'test.multiconsumer_81_queue', 
      subscriber =>  subscriber, 
      rule       => 'priority = 1'); 
END;
/

サブスクライバの削除

DBMS_AQADM.REMOVE_SUBSCRIBERは、デフォルトのサブスクライバをキューから削除します。

DBMS_AQADM.REMOVE_SUBSCRIBER (
   queue_name         IN         VARCHAR2,
   subscriber         IN         sys.aq$_agent);

この操作はすぐに有効になり、この操作を含むトランザクションはコミットされます。既存メッセージ内のこのサブスクライバに対するすべての参照は、操作の一部として削除されます。GLOBAL_TOPIC_ENABLED = TRUEの場合は、サブスクライバが削除されると、対応するLDAPエントリも削除されます。

そのコンシューマがデキューできるが保留しているメッセージがあるときに、REMOVE_SUBSCRIBERプロシージャを実行してもエラーにはなりません。このメッセージは、REMOVE_SUBSCRIBERプロシージャが完了すると自動的にデキュー不可になります。

注意:

REMOVE_SUBSCRIBERはキューに対する管理操作です。Oracle Database AQでは、アプリケーションによる管理コールおよび操作コールの同時発行が可能ですが、実行は逐次行われます。REMOVE_SUBSCRIBERは、メッセージをエンキューまたはデキューしている保留中のコールが完了するまでブロックします。保留中のトランザクションの完了は待機しません。

例8-47 サブスクライバの削除

DECLARE
   subscriber       sys.aq$_agent;
BEGIN
   subscriber := sys.aq$_agent ('subscriber2', 'test2.msg_queue2@london', null);
   DBMS_AQADM.REMOVE_SUBSCRIBER(
      queue_name => 'test.multiconsumer_81_queue',
      subscriber => subscriber);
END;
/

伝播の管理

あるキューに定義された伝播スケジュールは、そのキューの有効期間中いつでも変更または削除できます。

スケジュールを削除するかわりに一時的に使用不可にすることもできます。すべての管理コールは、スケジュールがアクティブかどうかに関係なく実行されます。スケジュールがアクティブの場合、コールが処理されるまでに数秒かかります。

次のトピックでは、伝播を管理する方法について説明します。

キューの伝播のスケジューリング

DBMS_AQADM.SCHEDULE_PROPAGATIONは、メッセージの伝播をスケジュールします。

DBMS_AQADM.SCHEDULE_PROPAGATION (
   queue_name         IN  VARCHAR2,
   destination        IN  VARCHAR2 DEFAULT NULL,
   start_time         IN  DATE     DEFAULT SYSDATE,
   duration           IN  NUMBER   DEFAULT NULL,
   next_time          IN  VARCHAR2 DEFAULT NULL,
   latency            IN  NUMBER   DEFAULT 60,
   destination_queue  IN  VARCHAR2 DEFAULT NULL);

宛先は、destinationパラメータのデータベース・リンクまたはdestination_queueパラメータのキュー名、あるいはその両方によって識別されます。データベース・リンクのみを指定すると、キューからdblinkへの伝播が行われます。別のデータベースにある複数のキューにメッセージを伝播する場合、すべての伝播が同じ頻度で行われます。

キュー表所有者のスキーマ内のプライベート・データベース・リンクが、パブリック・データベース・リンクと同じ名前の場合、AQは常にプライベート・データベース・リンクを使用します。

宛先キュー名を指定すると、キューからキューへの伝播が行われます。別のデータベース内の複数のキューにメッセージを伝播すると、キューからキューへの伝播により、各スケジュールを独立して構成できます。個別の伝播を有効化または無効化できます。

注意:

あるキューから別のデータベース内のキューへの伝播が必要な場合は、パラメータdestinationおよびdestination_queueを指定する必要があります。

キューからキューへの伝播モードは、宛先Oracle Real Application Clusters(Oracle RAC)システムに伝播する場合、透過的なフェイルオーバーをサポートします。キューからキューへの伝播では、Oracle RACでキューの所有者インスタンスが失敗した場合、データベース・リンクを再指定する必要がありません。

宛先にNULLを指定すると、メッセージを同じデータベース内の他のキューにも伝播できます。同じ宛先に複数の受信者を持つ場合、(キューが同じかどうかにかかわらず)メッセージは、すべての受信者に同時に伝播されます。

ソース・キューは、マルチ・コンシューマ向けのキュー表内に存在する必要があります。シングル・コンシューマ・キューを指定すると、エラーORA-24039が発生します。キューまたはデータベース・リンクを参照する場合、Oracle Database Advanced Queuingはシノニムの使用をサポートしていません。

伝播next_timeおよびdurationを指定すると、伝播は指定された期間、定期的に実行されます。next_timeまたはdurationを指定せずに待機時間をゼロに指定すると、結果の伝播は永久に実行され、メッセージがキューに表れると伝播し、それ以外のときはアイドルになります。next_timeまたはdurationが指定されずにゼロ以外の待機時間が指定されると(デフォルト)、伝播スケジュールはイベントに基づきます。伝播する必要のあるメッセージがキューにあるときに実行されるよう、スケジュールされます。システム定義の期間、メッセージがないと、伝播する新規メッセージが表れるまでジョブは実行を停止します。ジョブが実行される時間は、準備の完了しているジョブの数やジョブ・キュー・プロセスの数などの他の要因に応じて変化します。

伝播は線形バックオフ・スキームを使用して、障害が発生したスケジュールからの伝播を再試行します。あるスケジュールで続けて障害が発生したときは、最初の再試行は30秒後、次の再試行は60秒後、3回目の再試行は120秒後、というように続きます。再試行時間が現行の伝播枠の期限切れ時刻を超える場合は、次の再試行は、次の伝播枠の開始時刻に行われます。最大16回の再試行が行われた後、そのスケジュールは自動的に使用不可能になります。

注意:

再試行が次の伝播ウィンドウに移動されると、常に移動されるようになり、指数バックオフ・スキームは再試行のスケジュールを管理しません。DBMS_AQADM.SCHEDULE_PROPAGATIONnext_timeパラメータで指定された日付関数の結果、ウィンドウ間の間隔が短くなると、再試行の失敗数はすぐに16に達し、スケジュールが無効になります。

存在しないdestinationの値を指定すると、このプロシージャはエラーをスローせずに実行します。USER_QUEUE_SCHEDULESビューのLAST_ERROR_MSG列で、ランタイム伝播エラーを問い合せることができます。

関連項目:

例8-48 同じデータベース内のキューへの伝播のスケジューリング

BEGIN
   DBMS_AQADM.SCHEDULE_PROPAGATION(
      queue_name    =>    'test.multiconsumer_queue');
END;
/

例8-49 他のデータベース内のキューへの伝播のスケジューリング

BEGIN
   DBMS_AQADM.SCHEDULE_PROPAGATION(
      queue_name    =>    'test.multiconsumer_queue', 
      destination   =>    'another_db.world');
END;
/

例8-50 キューからキューへの伝播のスケジューリング

BEGIN
   DBMS_AQADM.SCHEDULE_PROPAGATION(
      queue_name         =>    'test.multiconsumer_queue', 
      destination        =>    'another_db.world'
      destination_queue  =>    'target_queue');
END;
/

伝播キュー・タイプの検証

DBMS_AQADM.VERIFY_QUEUE_TYPESは、ソース・キューおよび宛先キューのタイプが同じであるかどうかを検証します。検証の結果は、ディクショナリ表SYS.AQ$_MESSAGE_TYPES表に格納され、以前にこのコマンドから出力されたすべての結果は上書きされます。

DBMS_AQADM.VERIFY_QUEUE_TYPES(
   src_queue_name    IN    VARCHAR2,
   dest_queue_name   IN    VARCHAR2,
   destination       IN    VARCHAR2 DEFAULT NULL,
   rc                OUT   BINARY_INTEGER);

ソースおよび宛先に同じ型のキューがない場合に指定された変換では、ソース・キュー・タイプを宛先キュー・タイプにマップする必要があります。

注意:

  • SYS.AQ$_MESSAGE_TYPESは、同じソース・キュー、宛先キューおよびデータベース・リンクに対して複数のエントリを持ちますが、変換は異なります。

  • VERIFY_QUEUE_TYPESチェックは、AQ伝播スケジュールごとに一度行われ、送信されるすべての伝播メッセージに対して行われるわけではありません

  • キューのペイロードが変更された場合は、ソース・キューおよび宛先キュー間の既存の伝播スケジュールを削除して再作成する必要があります。

例8-51には、同じタイプの2つのキューが含まれます。戻り値は次のとおりです。

VQT: new style queue
Compatible: 1

test.another_queueのかわりにtest.raw_queue(RAW型のキュー)を使用して同じ例を実行すると、この例は次の行を戻します。

VQT: new style queue
Compatible: 0

例8-51 キュー・タイプの検証

SET SERVEROUTPUT ON
DECLARE 
rc      BINARY_INTEGER; 
BEGIN 
   DBMS_AQADM.VERIFY_QUEUE_TYPES(
      src_queue_name  => 'test.multiconsumer_queue', 
      dest_queue_name => 'test.another_queue',
      rc              =>  rc); 
   DBMS_OUTPUT.PUT_LINE('Compatible: '||rc);
END;
/

伝播スケジュールの変更

DBMS_AQADM.ALTER_PROPAGATION_SCHEDULEは、伝播スケジュールのパラメータを変更します。キューからキューへの伝播のdestination_queueパラメータは変更できません。

DBMS_AQADM.ALTER_PROPAGATION_SCHEDULE( 
   queue_name         IN  VARCHAR2, 
   destination        IN  VARCHAR2 DEFAULT NULL,
   duration           IN  NUMBER   DEFAULT NULL, 
   next_time          IN  VARCHAR2 DEFAULT NULL, 
   latency            IN  NUMBER   DEFAULT 60,
   destination_queue  IN  VARCHAR2 DEFAULT NULL);

例8-52 同じデータベース内のキューへの伝播スケジュールの変更

BEGIN
   DBMS_AQADM.ALTER_PROPAGATION_SCHEDULE(
      queue_name    =>    'test.multiconsumer_queue', 
      duration      =>    '2000', 
      next_time     =>    'SYSDATE + 3600/86400',
      latency       =>    '32'); 
END;
/

例8-53 他のデータベース内のキューへの伝播スケジュールの変更

BEGIN
   DBMS_AQADM.ALTER_PROPAGATION_SCHEDULE(
      queue_name    =>    'test.multiconsumer_queue', 
      destination   =>    'another_db.world', 
      duration      =>    '2000', 
      next_time     =>    'SYSDATE + 3600/86400',
      latency       =>    '32');
END;
/

伝播スケジュールの有効化

DBMS_AQADM.ENABLE_PROPAGATION_SCHEDULEは、以前に無効化した伝播スケジュールを有効化します。

DBMS_AQADM.ENABLE_PROPAGATION_SCHEDULE( 
   queue_name        IN   VARCHAR2, 
   destination       IN   VARCHAR2 DEFAULT NULL,
   destination_queue IN   VARCHAR2 DEFAULT NULL);

例8-54 同じデータベース内のキューへの伝播の有効化

BEGIN
   DBMS_AQADM.ENABLE_PROPAGATION_SCHEDULE(
      queue_name   =>   'test.multiconsumer_queue');
END;
/

例8-55 他のデータベース内のキューへの伝播の有効化

BEGIN
   DBMS_AQADM.ENABLE_PROPAGATION_SCHEDULE(
      queue_name    =>    'test.multiconsumer_queue', 
      destination   =>    'another_db.world');
END;
/

伝播スケジュールの無効化

DBMS_AQADM.DISABLE_PROPAGATION_SCHEDULEは、以前に有効化した伝播スケジュールを無効化します。

DBMS_AQADM.DISABLE_PROPAGATION_SCHEDULE( 
   queue_name        IN   VARCHAR2, 
   destination       IN   VARCHAR2 DEFAULT NULL,
   destination_queue IN   VARCHAR2 DEFAULT NULL);

例8-56 同じデータベース内のキューへの伝播の無効化

BEGIN
   DBMS_AQADM.DISABLE_PROPAGATION_SCHEDULE(
      queue_name   =>   'test.multiconsumer_queue');
END;
/

例8-57 他のデータベース内のキューへの伝播の無効化

BEGIN
   DBMS_AQADM.DISABLE_PROPAGATION_SCHEDULE(
      queue_name    =>    'test.multiconsumer_queue', 
      destination   =>    'another_db.world');
END;
/

キューの伝播スケジュールの解除

DBMS_AQADM.UNSCHEDULE_PROPAGATIONは、以前にスケジュールした、あるキューから宛先へのメッセージ伝播のスケジュールを解除します。宛先は、destinationパラメータの特定のデータベース・リンク、またはdestination_queueパラメータの名前によって識別されます。

DBMS_AQADM.UNSCHEDULE_PROPAGATION (
   queue_name        IN  VARCHAR2,
   destination       IN  VARCHAR2 DEFAULT NULL,
   destination_queue IN  VARCHAR2 DEFAULT NULL);

例8-58 同じデータベース内のキューへの伝播スケジュールの解除

BEGIN
   DBMS_AQADM.UNSCHEDULE_PROPAGATION(
      queue_name => 'test.multiconsumer_queue'); 
END;
/

例8-59 他のデータベース内のキューへの伝播スケジュールの解除

BEGIN
   DBMS_AQADM.UNSCHEDULE_PROPAGATION(
      queue_name    =>   'test.multiconsumer_queue', 
      destination   =>   'another_db.world');
END;
/

Oracle Database Advanced Queuingエージェントの管理

次のトピックでは、Oracle Database Advanced Queuingエージェントを管理する方法を説明します。

Oracle Database Advanced Queuingエージェントの作成

DBMS_AQADM.CREATE_AQ_AGENTは、HTTPプロトコルを使用して、Oracle Database Advanced Queuingインターネット・アクセスのためのエージェントを登録します。

DBMS_AQADM.CREATE_AQ_AGENT (
  agent_name                IN VARCHAR2,
  certificate_location      IN VARCHAR2 DEFAULT NULL,
  enable_http               IN BOOLEAN DEFAULT FALSE,
  enable_anyp               IN BOOLEAN DEFAULT FALSE);

SYS.AQ$INTERNET_USERSビューには、すべてのOracle Database Advanced Queuingインターネット・エージェントのリストが表示されます。エージェントが作成、変更または削除された場合、次の条件が満たされていれば、そのエージェントに対してLDAPエントリが作成されます。

  • GLOBAL_TOPIC_ENABLED = TRUE

  • certificate_locationを指定

Oracle Database Advanced Queuingエージェントの変更

DBMS_AQADM.ALTER_AQ_AGENTは、Oracle Databaseアドバンスト・キューイング・インターネット・アクセス用に登録されたエージェントを変更します。

DBMS_AQADM.ALTER_AQ_AGENT (
  agent_name                IN VARCHAR2,
  certificate_location      IN VARCHAR2 DEFAULT NULL,
  enable_http               IN BOOLEAN DEFAULT FALSE,
  enable_anyp               IN BOOLEAN DEFAULT FALSE);

Oracle Database Advanced Queuingエージェントが作成、変更または削除された場合、次の条件が満たされていれば、そのエージェントに対してLDAPエントリが作成されます。

  • GLOBAL_TOPIC_ENABLED = TRUE

  • certificate_locationを指定

Oracle Database Advanced Queuingエージェントの削除

DBMS_AQADM.DROP_AQ_AGENTは、以前にOracle Database Advanced Queuingインターネット・アクセスに登録されたエージェントを削除します。

DBMS_AQADM.DROP_AQ_AGENT (
  agent_name     IN VARCHAR2);

Oracle Database Advanced Queuingエージェントが作成、変更または削除された場合、次の条件が満たされていれば、そのエージェントに対してLDAPエントリが作成されます。

  • GLOBAL_TOPIC_ENABLED = TRUE

  • certificate_locationを指定

データベース・アクセスの許可

DBMS_AQADM.ENABLE_DB_ACCESSは、Oracle Databaseアドバンスト・キューイング・インターネット・エージェントに特定のデータベース・ユーザーの権限を付与します。このエージェントは、CREATE_AQ_AGENTプロシージャを使用して事前に作成されています。

DBMS_AQADM.ENABLE_DB_ACCESS (
  agent_name                IN VARCHAR2,
  db_username               IN VARCHAR2)

SYS.AQ$INTERNET_USERSビューには、すべてのOracle Database Advanced Queuingインターネット・エージェント、および権限が付与されているデータベース・ユーザーの名前のリストが表示されます。

データベース・アクセスの禁止

DBMS_AQADM.DISABLE_DB_ACCESSは、Oracle Database Advanced Queuingインターネット・エージェントから特定のデータベース・ユーザーの権限を取り消します。これらの権限は、ENABLE_DB_ACCESSプロシージャを使用して事前にエージェントに付与されています。

DBMS_AQADM.DISABLE_DB_ACCESS (
  agent_name                IN VARCHAR2,
  db_username               IN VARCHAR2)

LDAPサーバーへの別名の追加

DBMS_AQADM.ADD_ALIAS_TO_LDAPは、LDAPサーバーに別名を追加します。

DBMS_AQADM.ADD_ALIAS_TO_LDAP(
   alias          IN VARCHAR2,
   obj_location   IN VARCHAR2);

このコールは、LDAPのOracle Database Advanced Queuingオブジェクトの別名および識別名を使用して、Oracle Database Advanced Queuingオブジェクトを指す別名を作成します。この別名は、データベース・サーバーの識別名の直下に配置されます。別名が指すオブジェクトは、キュー、エージェントまたはConnectionFactoryです。

LDAPサーバーからの別名の削除

DBMS_AQADM.DEL_ALIAS_FROM_LDAPは、LDAPサーバーから別名を削除します。

DBMS_AQADM.DEL_ALIAS_FROM_LDAP(
   alias IN VARCHAR2);

このコールは、別名の名前を引数として使用し、LDAPサーバーの別名エントリを削除します。別名がLDAPディレクトリのデータベース・サーバー直下にあることが前提です。