DBMS_XAシステムパッケージには、アプリケーションがPL中にXAインターフェースを呼び出すためのXA/Openインターフェースが含まれています。
このシステムパッケージを使用することで、アプリケーション開発者はPLを使用してOceanBaseクライアントセッション間またはプロセス間でトランザクションを切り替えたり共有したりできます。
DBMS_XAサブプログラムは、PLアプリケーションがグローバルトランザクション分岐ID(XID)を定義し、現在のセッションをトランザクション分岐に関連付けたり、関連付けを解除したりすることを許可します。
機能の適用範囲
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
DBMS_XA権限の説明
このパッケージはSYS配下に作成されます。このシステムパッケージが提供する操作は、現在の呼び出し元によって実行され、システムパッケージ所有者のSYSによって実行されるわけではありません。DBMS_XAサブプログラムの呼び出しは、現在ユーザーの権限の下でPL匿名ブロックを実行します。ストアドプロシージャから呼び出される任意のDBMS_XAサブプログラムは、ストアドプロシージャ所有者の権限を使用して実行されます。
XA_RECOVERサブプログラムを実行するユーザーには、SYS.DBA_PENDING_TRANSACTIONSのSELECTまたはREAD権限が必要です。
DBMS_XAの使用方法
分散トランザクション処理用のX/Open CAE標準に準拠したXA仕様によると、トランザクションが現在のセッションに関連付けられている間は、XA_PREPARE / COMMIT / ROLLBACK / FORGETが呼び出されない場合があります。アプリケーションがXA_PREPARE / COMMIT / ROLLBACK / FORGETを呼び出せるのは、XA_ENDを呼び出した後で、かつ現在のセッションに関連付けられているトランザクションがない場合のみです。
トランザクションが現在のセッションに関連付けられている場合、XA_PREPARE / COMMIT / ROLLBACK / FORGETからXAERPROTOエラーメッセージが返されます。
任意のシステムパッケージサブプログラムを呼び出す前に、OceanBaseデータベースサーバーのバックエンドまたはリソースマネージャー(リソースマネージャー識別子はサポートされていません)への接続/セッションが確立されていなければなりません。複数のリソースマネージャーが関与する場合は、任意のパッケージサブプログラムを呼び出す前に、各リソースマネージャーごとに事前に複数の接続/セッションを確立しておく必要があります。グローバルトランザクション処理中に複数の接続/セッションが確立された場合、呼び出し元は特定のグローバルトランザクション分岐識別子(XID)に関連付けられたすべての接続/セッションが同一のリソースマネージャーに確立されていることを保証する必要があります。
DBMS_XAサブプログラムの概要
以下の表は、OceanBaseデータベースの現在のバージョンでサポートされているDBMS_XAサブプログラムとその簡潔な説明です。
サブプログラム |
説明 |
|---|---|
| DIST_TXN_SYNC | シンクロナイズのためのリカバリ。
説明OceanBaseデータベースはこのプロシージャを互換性のためにのみサポートしており、実質的な操作は行いません。 |
| XA_COMMIT | xidで指定されたグローバルトランザクションをコミットします。 |
| XA_END | 現在のセッションをxidで指定された関連トランザクション分岐から切り離します。 |
| XA_FORGET | リソースマネージャーRMに対し、コミットまたはロールバックされたトランザクション分岐の破棄を要求します。 |
| XA_GETLASTOER | 以前のXA呼び出しが失敗した場合、最後のエラーコードを取得します。 |
| XA_PREPARE | xidで指定されたトランザクション分岐のコミットを準備します。 |
| XA_RECOVER | リソースマネージャーRMから、準備済みでコミットまたはロールバックされた(ただしトランザクション情報はまだ破棄されていない)トランザクション分岐のリストを取得します。 |
| XA_ROLLBACK | リソースマネージャーRMに対し、トランザクション分岐のロールバックを要求します。 |
| XA_SETTIMEOUT | 現在のセッションのトランザクションタイムアウト間隔を設定します(秒単位)。 |
| XA_START | 現在のセッションを xid で指定されたトランザクション分岐に関連付けます。 |