OceanBase 分布式事务概述
使用 XA 功能时,事务管理器将使用 XA 资源实例来准备和协调每个事务分支,然后适当地提交或回滚所有事务分支。
XA 功能的关键组件包括 XA 数据源、XA 连接、XA 资源和事务编号。
XA 数据源
XA 数据源是连接池数据源和其他数据源的扩展,在概念和功能上相似。
每个资源管理器将有一个 XA 数据源实例,并用于分布式事务中。通常,在中间层软件中创建 XA 数据源实例。
XA 数据源产生 XA 连接。
XA 连接
XA 连接是池连接的扩展,在概念和功能上相似。XA 连接封装了物理数据库连接。各个连接实例是这些物理连接的临时句柄。
XA 连接实例只对应于一个会话,尽管该会话可以由多个逻辑连接实例按顺序使用,例如池连接实例。
通常,可以从中间层软件中的 XA 数据源实例获取 XA 连接实例。如果分布式事务将涉及同一数据库中的多个会话,则可以从单个 XA 数据源实例获得多个 XA 连接实例。
XA 连接产生 OracleXAResource 实例和 JDBC 连接实例。
XA 资源
事务管理器使用 XA 资源来协调分布式事务的事务分支。
通常,在中间层软件中,可以从每个 XA 连接实例中获得一个 OracleXAResource 实例。OracleXAResource 实例和 XA 连接实例之间存在一对一的关联。同样,OracleXAResource 实例与会话之间也存在一对一的关联。
在典型情况下,中间层组件会将 OracleXAResource 实例移交给事务管理器,以用于协调分布式事务。
因为每个 OracleXAResource 实例都对应一个会话,所以在任何给定时间只能有一个与 OracleXAResource 实例关联的活动事务分支,但也可能会有其他暂停的事务分支。
每个 OracleXAResource 实例可以操作与其相关联的会话事务分支,包括启动、结束、准备、提交或回滚。
准备步骤是两阶段提交操作的第一步。事务管理器将向每个 OracleXAResource 实例发出 PREPARE
。一旦事务管理器看到每个事务分支的操作已成功准备,它将向每个 OracleXAResource 实例发出 COMMIT
来提交所有更改。
事务 ID
事务 ID 用于标识事务分支。每个 ID 包括事务分支 ID 组件和分布式事务 ID 组件。这也就是分支与分布式事务关联的方式。与给定的分布式事务关联的所有 OracleXAResource 实例都具有一个事务 ID,该事务 ID 包含相同的分布式事务 ID 组件。
OracleXAResource.ORATRANSLOOSE
使用事务 ID xid
启动一个松散耦合的事务。