Oracle と互換性のある PolarDB データベースは、メッセージのキューとメッセージ処理を提供しています。 ユーザー定義メッセージはキューに格納されています。 キューのコレクションは、キューテーブルに格納されています。 DBMS_AQADM パッケージのプロシージャを使用して、メッセージのキューとキューテーブルを作成および管理することができます。 DBMS_AQ パッケージを使用して、キューにメッセージを追加したり、キューからメッセージを削除したり、PL/SQL コールバックプロシージャを登録または登録解除したりすることができます。
Oracle と互換性のある PolarDB データベースは、次の SQL コマンドを実行することにより、DBMS_AQ パッケージに互換性のない拡張機能も提供しています。
- ALTER QUEUE
- ALTER QUEUE TABLE
- CREATE QUEUE
- CREATE QUEUE TABLE
- DROP QUEUE
- DROP QUEUE TABLE
DBMS_AQADM パッケージは、キューとキューテーブルを作成および管理できるストアドプロシージャを提供しています。
関数/手順 | 戻り値の型 | 説明 |
---|---|---|
ALTER_QUEUE | N/A | 既存のキューを変更します。 |
ALTER_QUEUE_TABLE | N/A | 既存のキューテーブルを変更します。 |
CREATE_QUEUE | N/A | Creates a queue. |
CREATE_QUEUE_TABLE | N/A | キューテーブルを作成します。 |
DROP_QUEUE | N/A | 既存のキューを削除します。 |
DROP_QUEUE_TABLE | N/A | 既存のキューテーブルを削除します。 |
PURGE_QUEUE_TABLE | N/A | キューテーブルから 1 つ以上のメッセージを削除します。 |
START_QUEUE | N/A | キューをエンキュープロシージャでおよびデキュープロシージャで使用できるようにします。 |
STOP_QUEUE | N/A | キューをエンキュープロシージャでおよびデキュープロシージャで使用できないようにします。 |
Oracle と互換性のある PolarDB データベースでの DBMS_AQADM の実装は、ネイティブ Oracle と比較すると部分的な実装です。 上記の表にリストされている関数とプロシージャのみがサポートされています。
次の表に、Oracle と互換性のある PolarDB データベースでサポートされている定数を示します。
定数 | 説明 | 適用パラメーター |
---|---|---|
DBMS_AQADM.TRANSACTIONAL(1) | この定数が定義されています。 この定数を使用すると、エラーメッセージが返されます。 | message_grouping |
DBMS_AQADM.NONE(0) | キューテーブルのメッセージのグループ化を指定します。 | message_grouping |
DBMS_AQADM.NORMAL_QUEUE(0) | create_queue とともに使用して、queue_type を指定します。 | queue_type |
DBMS_AQADM.EXCEPTION_QUEUE (1) | create_queue とともに使用して、queue_type を指定します。 | queue_type |
DBMS_AQADM.INFINITE(-1) | create_queue と共に使用して、retention_time を指定します。 | retention_time |
DBMS_AQADM.PERSISTENT (0) | メッセージはテーブルに保存する必要があります。 | enqueue_options_t.delivery_mode |
DBMS_AQADM.BUFFERED (1) | この定数が定義されています。 この定数を使用すると、エラーメッセージが返されます。 | enqueue_options_t.delivery_mode |
DBMS_AQADM.PERSISTENT_OR_BUFFERED (2) | この定数が定義されています。 この定数を使用すると、エラーメッセージが返されます。 | enqueue_options_t.delivery_mode |
ALTER_QUEUE
ALTER_QUEUE プロシージャを使用して、既存のキューを変更することができます。 プロシージャには次の署名があります。
ALTER_QUEUE(
max_retries IN NUMBER DEFAULT NULL,
retry_delay IN NUMBER DEFAULT 0
retention_time IN NUMBER DEFAULT 0,
auto_commit IN BOOLEAN DEFAULT TRUE)
comment IN VARCHAR2 DEFAULT NULL,
パラメーター
パラメーター | 説明 |
---|---|
queue_name | 新しいキューの名前です。 |
max_retries | DEQUEUE 文でメッセージが削除されるまでに許容される失敗した試行の最大数です。 max_retries の値は、各 ROLLBACK 文で増分されます。 失敗した試行の数が max_retries で指定された値に達すると、メッセージは例外キューに移動されます。 0 の値は、再試行が許可されないことを意味します。 |
retry_delay | 再処理のためのロールバックとメッセージスケジュールの間に経過した秒数です。 0 の値は、メッセージをすぐに再処理する必要があることを意味します。 これがデフォルト値です。 |
retention_time | メッセージのデキューと保存の間に経過した秒数です。 0 の値は、メッセージがデキューされた後に保持できないことを意味します。 INFINITE の値は、メッセージが永久に保持されることを意味します。 デフォルト値は 0 です。 |
auto_commit | このパラメーターは無視されますが、互換性のために含まれています。 |
comment | キューに関連付けられたコメントです。 |
例
次のコマンドを使用して、work_order という名前のキューを変更し、retry_delay パラメーターを 5 秒に設定します。
EXEC DBMS_AQADM.ALTER_QUEUE(queue_name => 'work_order', retry_delay => 5);
ALTER_QUEUE_TABLE
ALTER_QUEUE_TABLE プロシージャを使用して、既存のキューテーブルを変更することができます。 プロシージャには次の署名があります。
ALTER_QUEUE_TABLE (
queue_table IN VARCHAR2,
comment IN VARCHAR2 DEFAULT NULL,
primary_instance IN BINARY_INTEGER DEFAULT 0,
secondary_instance IN BINARY_INTEGER DEFAULT 0,
パラメーター
パラメーター | 説明 |
---|---|
queue_table | キューテーブルの名前です。 これはスキーマで修飾された名前の場合があります。 |
comment | キューテーブルに関するコメントです。 |
primary_instance | このパラメーターは無視されますが、互換性のために含まれています。 |
secondary_instance | このパラメーターは無視されますが、互換性のために含まれています。 |
例
次のコマンドは、work_order_table という名前のキューテーブルを変更するために使用されます。
EXEC DBMS_AQADM.ALTER_QUEUE_TABLE
(queue_table => 'work_order_table', comment => 'This queue table contains work orders for the shipping department.') ;
キューテーブルの名前は work_order_table です。 このコマンドは、キューテーブルの定義にコメントを追加するために使用されます。
CREATE_QUEUE
CREATE_QUEUE プロシージャを使用して、既存のキューテーブルにキューを作成することができます。 プロシージャには次の署名があります。
CREATE_QUEUE(
queue_name IN VARCHAR2
queue_table IN VARCHAR2,
queue_type IN BINARY_INTEGER DEFAULT NORMAL_QUEUE,
max_retries IN NUMBER DEFAULT 5,
retry_delay IN NUMBER DEFAULT 0
retention_time IN NUMBER DEFAULT 0,
dependency_tracking IN BOOLEAN DEFAULT FALSE,
comment IN VARCHAR2 DEFAULT NULL,
auto_commit IN BOOLEAN DEFAULT TRUE)
パラメーター
パラメーター | 説明 |
---|---|
queue_name | 新しいキューの名前です。 |
queue_table | 新しいキューが配置されているテーブルの名前です。 |
queue_type | 新しいキューの型。 有効値:
|
max_retries | DEQUEUE 文でメッセージが削除されるまでに許容される失敗した試行の最大数です。 max_retries の値は、各 ROLLBACK 文で増分されます。 失敗した試行の数が max_retries で指定された値に達すると、メッセージは例外キューに移動されます。 システムテーブルのデフォルト値は 0 です。 ユーザー定義テーブルのデフォルト値は 5 です。 |
retry_delay | 再処理のためのロールバックとメッセージスケジューリングの間に経過した秒数です。 0 の値は、メッセージをすぐに再処理する必要があることを意味します。 これがデフォルト値です。 |
retention_time | メッセージのデキューと保存の間に経過した秒数です。 0 の値は、メッセージがデキューされた後に保持できないことを意味します。 INFINITE の値は、メッセージが永久に保持されることを意味します。 デフォルト値は 0 です。 |
dependency_tracking | このパラメーターは無視されますが、互換性のために含まれています。 |
comment | キューに関連付けられたコメントです。 |
auto_commit | このパラメーターは無視されますが、互換性のために含まれています。 |
例
次の匿名ブロックは、work_order_table テーブルに work_order という名前のキューを作成するために使用されます。
BEGIN
DBMS_AQADM.CREATE_QUEUE ( queue_name => 'work_order', queue_table => 'work_order_table', comment => 'This queue contains pending work orders.') ;
END;
CREATE_QUEUE_TABLE
CREATE_QUEUE_TABLE プロシージャを使用して、キューテーブルを作成することができます。 プロシージャには次の署名があります。
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)
パラメーター
パラメーター | 説明 |
---|---|
queue_table | キューテーブルの名前です。 これはスキーマで修飾された名前の場合があります。 |
queue_payload_type | キューテーブルに格納されるデータのユーザー定義タイプです。 RAW f データ型を指定するには、RAW 型を識別するユーザー定義型を作成する必要があります。 |
storage_clause | キューテーブルの属性を指定します。 TABLESPACE オプションのみが適用されます。 他のすべてのオプションは無視されますが、互換性のために含まれています。 TABLESPACE
句を使用して、テーブルが作成されるテーブルスペースの名前を指定することができます。
|
sort_list | このパラメーターは、キューのデキュー順序を制御し、キューを昇順でソートするために使用される列の名前を指定します。 enq_time と優先順位の次の組み合わせがサポートされています。
|
multiple_consumers | このパラメーターは、必要に応じて FALSE に設定する必要があります。 |
message_grouping | このパラメーターは、必要に応じて NONE に設定する必要があります。 |
comment | キューテーブルに関するコメントです。 |
auto_commit | このパラメーターは無視されますが、互換性のために含まれています。 |
primary_instance | このパラメーターは無視されますが、互換性のために含まれています。 |
secondary_instance | このパラメーターは無視されますが、互換性のために含まれています。 |
compatible | このパラメーターは無視されますが、互換性のために含まれています。 |
secure | このパラメーターは無視されますが、互換性のために含まれています。 |
例
次の匿名ブロックは、VARCHAR2 名と TEXT プロジェクトの説明を保持する属性を持つ work_order 型を作成するために使用されます。 ブロックはこの型を使用してキューテーブルを作成します。
BEGIN
CREATE TYPE work_order AS (name VARCHAR2, project TEXT, completed BOOLEAN);
EXEC DBMS_AQADM.CREATE_QUEUE_TABLE
(queue_table => 'work_order_table',
queue_payload_type => 'work_order',
comment => 'Work order message queue table');
END;
キューテーブルの名前は work_order_table で、work_order 型のペイロードが含まれています。 これが作業指示メッセージキューテーブルであることを示すコメントが追加されます。
DROP_QUEUE
DROP_QUEUE プロシージャを使用して、キューを削除することができます。 プロシージャには次の署名があります。
DROP_QUEUE(
queue_name IN VARCHAR2,
auto_commit IN BOOLEAN DEFAULT TRUE)
パラメーター
パラメーター | 説明 |
---|---|
queue_name | 削除するキューの名前です。 |
auto_commit | このパラメーターは無視されますが、互換性のために含まれています。 |
例
次の匿名ブロックは、work_order という名前のキューを削除します。
BEGIN
DBMS_AQADM.DROP_QUEUE(queue_name => 'work_order');
END;
DROP_QUEUE_TABLE
DROP_QUEUE_TABLE プロシージャを使用して、キューテーブルを削除することができます。 プロシージャには次の署名があります。
DROP_QUEUE_TABLE(
queue_table IN VARCHAR2,
force IN BOOLEAN default FALSE,
auto_commit IN BOOLEAN default TRUE)
パラメーター
パラメーター | 説明 |
---|---|
queue_table | キューテーブルの名前です。 これはスキーマで修飾された名前の場合があります。 |
force | force キーワードは、コマンドを使用してエントリを含むテーブルを削除するときの DROP_QUEUE_TABLE コマンドの動作を指定します。
|
auto_commit | このパラメーターは無視されますが、互換性のために含まれています。 |
例
次の匿名ブロックは、work_order_table という名前のテーブルを削除するために使用されます。
BEGIN
DBMS_AQADM.DROP_QUEUE_TABLE ('work_order_table', force => TRUE);
END;
PURGE_QUEUE_TABLE
PURGE_QUEUE_TABLE プロシージャを使用して、キューテーブルからメッセージを削除することができます。 プロシージャには次の署名があります。
PURGE_QUEUE_TABLE(
queue_table IN VARCHAR2,
purge_condition IN VARCHAR2,
purge_options IN aq$_purge_options_t)
パラメーター
パラメーター | 説明 |
---|---|
queue_table | メッセージを削除するキューテーブルの名前です。 |
purge_condition | サーバーが削除するメッセージを決定するときにサーバーが評価する条件として指定します。 条件は SQL WHERE 句で指定されます。 |
purge_options | aq$_purge_options_t 型のオブジェクトです。 aq$_purge_options_t オブジェクトには、特定の属性が含まれています。 詳細については、「表 1」をご参照ください。 |
属性 | データ型 | 説明 |
---|---|---|
Block | Boolean | TRUE の値は、テーブル内のすべてのキューで排他ロックを保持する必要があることを意味します。 デフォルト値は FALSE です。 |
delivery_mode | INTEGER | 削除するオブジェクトの名前です。 サポートされている唯一の値は dbms_aq.percent です。 |
例
次の匿名ブロックは、completed という名前の列の値が YES である work_order_table からメッセージを削除するために使用されます。
DECLARE
purge_options dbms_aqadm.aq$_purge_options_t;
BEGIN
dbms_aqadm.purge_queue_table('work_order_table', 'completed = YES', purge_options);
END;
START_QUEUE
START_QUEUE プロシージャを使用すると、キューをエンキューおよびデキューできるようになります。 プロシージャには次の署名があります。
START_QUEUE(
queue_name IN VARCHAR2,
enqueue IN BOOLEAN DEFAULT TRUE,
dequeue IN BOOLEAN DEFAULT TRUE)
パラメーター
パラメーター | 説明 |
---|---|
queue_name | 開始するキューの名前です。 |
enqueue | TRUE の値は、エンキューが有効であることを意味します。 FALSE の値は、現在の設定が変更されていないことを意味します。 デフォルト値は TRUE です。 |
dequeue | TRUE の値は、デキューが有効であることを意味します。 FALSE の値は、現在の設定が変更されていないことを意味します。 デフォルト値は TRUE です。 |
例
次の匿名ブロックは、work_order という名前のキューをエンキューに使用できるようにするために使用されます。
BEGIN
DBMS_AQADM.START_QUEUE
(queue_name => 'work_order);
END;
STOP_QUEUE
STOP_QUEUE プロシージャを使用して、指定したキューのエンキューまたはデキューを無効化することができます。 プロシージャには次の署名があります。
STOP_QUEUE(
queue_name IN VARCHAR2,
enqueue IN BOOLEAN DEFAULT TRUE,
dequeue IN BOOLEAN DEFAULT TRUE,
wait IN BOOLEAN DEFAULT TRUE)
パラメーター
パラメーター | 説明 |
---|---|
queue_name | 登録するデバイスの名前を指定します。 |
enqueue | TRUE の値は、エンキューが無効であることを意味します。 FALSE の値は、現在の設定が変更されていないことを意味します。 デフォルト値は TRUE です。 |
dequeue | TRUE の値は、デキューが無効であることを意味します。 FALSE の値は、現在の設定が変更されていないことを意味します。 デフォルト値は TRUE です。 |
wait | TRUE の値は、サーバーが未完了のトランザクションが完了するのを待ってから、サーバーが指定された変更を適用することを意味します。 サーバーがキューの停止を待機している場合には、指定されたキューにトランザクションをエンキューまたはデキューすることはできません。 値が FALSE の場合には、キューはすぐに停止します。 |
例
次の匿名ブロックを使用して、work_order という名前のキューへのエンキューとデキューを無効にします。
BEGIN
DBMS_AQADM.STOP_QUEUE(queue_name =>'work_order', enqueue=>TRUE, dequeue=>TRUE, wait=>TRUE);
END;
未処理のトランザクションがすべて完了すると、エンキューとデキューが停止します。