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からXAER_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 で指定されたトランザクション分岐に関連付けます。 |