173 DBMS_SAGA
DBMS_SAGAパッケージは、sagaを開始およびファイナライズするためのsagaファンクションおよびプロシージャのコレクションを提供します。
この章のトピックは、次のとおりです:
173.1 DBMS_SAGA概要
DBMS_SAGAパッケージを使用すると、(開発者は)中間層を必要とせずに、PL/SQLを使用してデータベース内のパッケージ化されたマイクロサービス・アプリケーションを開発できます。
DBMS_SAGAパッケージは、クライアント・プログラムがデータベースsagaと対話できるようにするためのPL/SQLインタフェースを提供します。
中間層を使用してデータベースと通信するマイクロサービスを実装する場合は、AQJMS拡張を使用してsaga機能を実装することをお薦めします。
参照:
AQJMS拡張の詳細は、「JMSインタフェースを使用したSagaの管理」を参照してください。173.3 DBMS_SAGAサブプログラムの要約
この表では、DBMS_SAGAパッケージのサブプログラムをリストし、簡単に説明します。
表173-1 DBMS_SAGAパッケージ・サブプログラム
| サブプログラム | 説明 |
|---|---|
|
新しい |
|
| GET_SAGA_IDファンクション | データベース・セッションに関連付けられたSagaのSaga IDを取得します。 |
| SET_SAGA_IDプロシージャ | データベース・セッションのSaga IDを、指定されたsaga_idに設定します。
|
| COMMIT_SAGAプロシージャ | saga_idパラメータで識別されるSagaをコミットします。
|
| ROLLBACK_SAGAプロシージャ | saga_idパラメータで識別されるSagaをロールバックします。
|
| IS_INCOMPLETEファンクション | 指定されたsaga_idに対応するSagaが未完了とみなされた場合にTRUEを戻します。
|
| SET_INCOMPLETEプロシージャ | 指定されたsaga_idで識別されるSagaを未完了としてマークします。
|
| SEND_REQUESTプロシージャ | 開始されたSagaへの参加者を登録します。 |
173.3.1 BEGIN_SAGAファンクション
このファンクションは、新しいsaga GUID: saga_id_tを作成して戻します。 新しいsaga IDは、saga$ディクショナリ表に挿入されます。
構文
function begin_saga(initiator_name IN varchar2,
timeout IN number default NULL,
version IN number default 1)
return saga_id_t;
パラメータ
表173-2 BEGIN_SAGAプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
sagaイニシエータの名前。 |
timeout |
タイムアウト値を秒数で指定します。 この値は、 |
173.3.2 GET_SAGA_IDファンクション
このファンクションは、現在のデータベース・セッションに関連付けられているsaga (ある場合)を戻します。
構文
function get_saga_id() return saga_id_t;
173.3.3 SET_SAGA_IDプロシージャ
このプロシージャは、データベース・セッションのsaga IDを指定されたsaga_idに設定します。
構文
procedure set_saga_id(saga_id IN saga_id_t);
パラメータ
表173-3 SET_SAGAプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
タイプ |
173.3.4 COMMIT_SAGAプロシージャ
このプロシージャは、saga_idパラメータで識別されるsagaをコミットします。
forceオプションは、保留中または未完了のsagaに対してsaga参加者トランザクションを強制的にコミットするために使用されます。参加者データベースに対するCOMMIT_SAGA()コールの場合、force=TRUEは参加者データベースのsagaブランチ操作をコミットするのみです。 forceのデフォルト値はTRUEです。
構文
procedure commit_saga(saga_participant IN VARCHAR2, saga_id IN saga_id_t, force IN BOOLEAN DEFAULT FALSE);
パラメータ
表173-4 COMMIT_SAGAプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
saga参加者( |
|
|
タイプ |
force |
sagaのコミット操作がsagaブランチに対して開始されるかどうかを示すフラグ。 |
173.3.5 ROLLBACK_SAGAプロシージャ
このプロシージャは、saga_idパラメータに対応するsagaを中断します。
forceオプションを使用すると、保留中または未完了のsagaに対してsaga参加者トランザクションを強制的にロールバックできます。参加者データベースに対するROLLBACK_SAGA()コールの場合、force=TRUEは参加者データベースのsagaブランチ操作をロールバックするのみです。 forceのデフォルト値はTRUEです。
構文
procedure rollback_saga (saga_participant IN VARCHAR2, saga_id IN saga_id_t, force IN BOOLEAN DEFAULT FALSE);
パラメータ
表173-5 ROLLBACK_SAGAプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
saga参加者( |
|
|
タイプ |
force |
ロールバックsaga操作が参加者データベースに対して開始されるかどうかを示すフラグ。 デフォルト値は |
173.3.6 IS_INCOMPLETEファンクション
このファンクションは、指定されたsaga_idに対応するsagaが未完了とみなされた場合にTRUEを戻します。
sagaは、次の理由により未完了とみなされます。
- sagaが
max_saga_durationパラメータで識別される期間またはbegin_saga()コールによって設定された期間を超える場合。 - sagaの参加者がsaga (コミットまたはロールバック)をファイナライズできない場合。
構文
function is_incomplete (saga_id IN saga_id_t) returns boolean;
パラメータ
表173-6 IS_COMPLETEファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
タイプ |
173.3.7 SET_INCOMPLETEプロシージャ
このプロシージャは、指定されたsaga_idパラメータに対応するsagaを未完了としてマークします。
これは、特定のsagaを未完了としてマークして、これらのsagaに手動操作のフラグを付けることができるようにする管理インタフェースです。
構文
procedure set_incomplete (saga_id IN saga_id_t);
パラメータ
表173-7 SET_INCOMPLETEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
タイプ |
173.3.8 SEND_REQUESTプロシージャ
このプロシージャは、開始されたsagaへの参加者を登録するためにクライアントが使用できます。
このプロシージャは、sagaメッセージの作成、JSONペイロードの変換および参加者へのメッセージのエンキューを抽象化します。 アプリケーション開発者はこのステップも手動で実行することもできます。
構文
procedure send_request(saga_id IN saga_id_t, recipient IN VARCHAR2, payload IN JSON DEFAULT NULL, saga_version IN NUMBER DEFAULT 1, saga_spare IN VARCHAR2 DEFAULT NULL);
パラメータ
表173-8 SEND_REQUESTプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
|
recipient |
このsagaに登録する参加者。 |
payload |
登録する参加者のrequest()をコールするJSONペイロード。 |
saga_version |
sagaフレームワークのバージョン(デフォルトは1)。 |
saga_spare |
現在使用されていないフィールド。 |