X/Open 分布式事务处理 (DTP) 模型允许高可用性集群中的可更新辅助服务器在分布式事务中充当资源管理器。
任何 XA 全局事务中的参与者有三种:
- 应用程序 (AP):定义事务界限,并指定构成事务分支的操作。
- 资源管理器 (RM):提供对资源(如数据库)的访问。
- 事务管理器 (TM):为事务分支指定标识 (XID),监视事务进度,以及协调事务分支以完成操作和实现故障恢复。
在高可用性集群中,会话可以从集群中的任何服务器创建事务分支或附加到事务分支。例如,可从 server_2 附加已从 server_1 分离的事务分支。应用程序可在不跟踪启动事务的服务器的情况下,使用连接管理器连接到集群。事务管理器也可以使用连接管理器连接到集群,以完成
XA 事务,方法是对松散和紧密耦合的事务均执行落实、回滚或忽视(请参阅松耦合与紧耦合方式)。
所有从辅助服务器启动的全局事务分支都将使用现有代理接口重定向到主服务器。
主服务器启动和维护所有事务分支,并执行与分支关联的所有请求工作。
在可更新辅助服务器上启动了 XA 事务时,主服务器上也将启动相应的 XA 事务。主服务器上的 XA 事务执行 XA 事务的整个生命周期(启动、结束、准备以及落实或回滚)。
辅助服务器上的 XA 事务用于支持未重定向到主服务器的查询。发出对 xa_end() 函数的调用时,系统将释放 XA 事务,并将用户会话从 XA 事务分离。所有 XA 事务请求和 XA 事务内发出的所有写操作都将重定向到主服务器。
以下功能特定于GBase 8s XA 实施:
- 所有 XA 接口请求在可更新的辅助服务器上均可用(请参阅辅助服务器上的数据库更新)。
- 支持从可更新的辅助服务器启动、准备以及落实或回滚 XA 事务。
- 支持 xa_recover() 函数,该函数用于从资源管理器获取已就绪事务分支的列表。
- 支持在高可用性集群服务器中执行 XA 事务分支迁移。集群中的任何服务器均可附加到 XA 事务分支,而不考虑事务分支是否源自该服务器。
- XA 客户机和事务管理器可使用连接管理器连接到任何高可用性集群服务器(请参阅连接管理)。
- 支持将 XA 请求从辅助服务器重定向到主服务器。
- 支持对 XA 事务执行事务挽救(请参阅在集群故障转移期间完成事务)。
- 如果运行已重定向的 XA 事务的辅助服务器出现故障,将回滚事务。
- 支持在 XA 环境内运行,但位于 XA 事务外的 SQL 事务。
在辅助服务器上运行的 XA 事务有以下限制:
- 不支持从其他用户会话(在相同或不同辅助服务器上)恢复暂挂的全局事务分支。
- 用户会话不能附加到与另一个辅助服务器上的其他用户会话关联的全局事务分支。
- XA 事务与辅助服务器上的其他数据具有相同的限制。请参阅辅助服务器上的数据库更新。
- XA 事务不能在只读辅助服务器上启动。
如果应用程序尝试在只读辅助服务器上创建新的 XA 事务,将收到 XA 错误代码 XAER_RMERR。此外,在只读辅助服务器上运行 xa_prepare()、xa_commit()
或 xa_rollback() 将返回错误代码 XA_NOTA (-4)。
- 只读辅助服务器上支持以下 XA API:
重要: 如果要将 .NET Framework 用于 Microsoft™ Transaction Server 以管理高可用性集群中的 XA 事务,那么必须使用 TransactionScope
类而非 ServiceConfig 类。TransactionScope 类可用于 .NET Framework 3.5。