codecamp

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​ 启动一个松散耦合的事务。


OceanBase 使用 ARRAY 和 STRUCT 类
OceanBase XA 组件
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

OceanBase 控制台指南

OceanBase ODC 使用指南

OceanBase Web 版 ODC

OceanBase 客户端版 ODC

OceanBase Connector/J 开发者指南

OceanBase 什么是OceanBase Connector/J

OceanBase SQL 参考(MySQL 模式)

OceanBase SQL 参考(Oracle 模式)

OceanBase 基本元素

OceanBase 数据库对象

OceanBase 函数

OceanBase 单行函数

OceanBase 返回数字的字符串函数

OceanBase 通用比较函数

OceanBase 编码解码函数

OceanBase SQL 调优指南

OceanBase 相关协议

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }