DBMS_XAシステムパッケージには、XA/Openインターフェースが含まれており、アプリケーションがPL中でXAインターフェースを呼び出すために使用されます。
このシステムパッケージを使用することで、アプリケーション開発者は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_END を呼び出した後で、現在のセッションに関連付けられているトランザクションがない場合にのみ、XA_PREPARE / COMMIT / ROLLBACK / FORGET を呼び出すことができます。
トランザクションが現在のセッションに関連付けられている場合、XA_PREPARE / COMMIT / ROLLBACK / FORGET から XA_ER_PROTO エラーメッセージが返されます。
任意のシステムサブルーチンを呼び出す前に、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 で指定されたトランザクション分岐と関連付けます。 |