DBMS_XA 系统包包含 XA / Open 接口,以供应用程序在 PL 中调用 XA 接口。

使用此系统包,应用程序开发人员可以使用 PL 在 OceanBase Client 会话或进程之间切换或共享事务。

DBMS_XA 子程序允许 PL 应用程序定义全局事务分支 ID(XID),并关联或取消关联当前会话与事务分支。

DBMS_XA 安全模型

该程序包是在 SYS 下创建的。由当前调用者执行此系统包提供的操作,不由系统包所有者 SYS 执行。在当前用户的权限下执行 DBMS_XA 子程序调用 PL 匿名块。从存储过程调用的任何 DBMS_XA 子程序都是使用存储过程所有者的权限执行的。

需要执行 XA_RECOVER 子程序的用户需要 SYS.DBA_PENDING_TRANSACTIONSSELECTREAD 权限。 需要操作其他用户创建的 XA 事务的用户需要 FORCE ANY TRANSACTION 权限。

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

在使用 Real Application Clusters(RAC)时用于同步的恢复

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 指定的事务分支相关联。