DM XA 编程指南

本章介绍如何使用DM XA库。通常,用户在使用事务处理监视器的应用程序中使用此库。XA功能在事务与多个数据库交互的应用程序中最有用。

12.1 X/Open分布式事务处理

X/Open分布式事务处理英文全称为X/Open Distributed Transaction Processing,简称X/Open DTP。

X/Open DTP体系结构定义了一个标准体系结构或者接口,该体系结构允许多个应用程序(AP)共享由多个甚至可能不同的资源管理器(RM)提供的资源。它将AP和RM之间的工作协调到全局事务中。

DM XA符合X/Open的XA接口规范。DM XA库是一个外部接口,它使非DM客户端事务管理器的客户端管理器(TM)能够协调全局事务,因此,允许在分布式事务中包含非DM数据库的其他资源管理器。

一个典型的X Open DTP模型

图12.1 一个典型的X/Open DTP模型

12.1.1 DTP术语

12.1.1.1 资源管理器

资源管理器英文全称为Resource Manager,简称为RM。

资源管理器控制一个共享的、可恢复的资源,该资源在发生故障后可以返回到一致状态。DM数据库是一个RM,在发生故障后可以使用联机日志和回滚段返回到一个一致状态。

12.1.1.2 分布式事务

分布式事务又称全局事务,是一个客户端事务,涉及多个分布式资源的更新,并且需要分布式的RM全部成功或者全部失败。

12.1.1.3 分支

分支是一个RM中包含的工作单元。多个分支构成一个全局事务。对于DM数据库,每个分支映射到数据库服务器内的本地事务。

12.1.1.4 事务管理器

事务管理器英文全称为Transaction Manager,简称为TM。

事务管理器提供了一个API来指定事务的边界,并管理提交和恢复。事务管理器在分布式的RM间实现了一个两阶段提交引擎,以实现分布式RM间事务的全部成功或者全部失败。

外部TM是驻留在DM数据库外部的中间层组件。通常,数据库是它自己的内部TM,使用基于标准的TM使DM数据库能够在单个事务中与其他异构RM协作。

12.1.1.5 事务处理监视器

事务处理监视器英文全称为Transaction Processing Monitor,简称为TPM。

TM通常由事务处理监视器(TPM)提供,例如:Oracle Tuxedo。TPM协调发出请求的客户端进程和处理请求的后端服务器之间的事务请求流。基本上,TPM协调需要几种不同类型后台进程服务的事务,例如分布在网络上的应用程序服务器和RM。

TPM同步完成分布式事务所需的任何提交或回滚。TPM的TM部分负责控制何时发生分布式提交和回滚。因此,如果分布式应用程序利用TPM,然后TPM的TM部分负责控制两阶段提交协议,RM使TM能够执行此任务。

由于TM控制分布式提交或回滚,因此必须通过XA接口直接与DM数据库(或其他RM)通信。基于它对事务中所有RM的了解,它使用“DM XA库子程序”中描述的DM XA库子程序来告诉DM数据库如何处理事务。

12.1.1.6 两阶段提交协议

DM XA库接口遵循两阶段提交协议,事件顺序如下:

  1. 在准备阶段,TM要求每个RM保证它可以提交事务的任何一部分。如果这是可以的,则RM记录其准备状态并肯定的答复TM。否则,RM可能回滚任务工作,对TM作出否定答复,然后忘记事务。协议允许应用程序或任何RM单方面回滚事务,直到准备阶段完成。
  2. 在第二阶段,TM记录提交决策,并向参与事务的所有RM发出提交或回滚。只有当所有RM都回复确定已进入第一阶段时,TM才能为RM发出提交。

12.1.1.7 应用程序

应用程序英文全称为Application Program,简称为AP。

应用程序定义事务边界并指定构成事务的操作。例如,AP可以是预编译程序。AP通过其本机接口对RM资源进行操作。

12.1.1.8 TX接口

应用程序通过一个名为TX的接口通过TM启动并完成所有事务控制操作,AP不直接使用XA接口。AP不知道在中间层分叉的分支:应用程序线程不显式地加入、离开、挂起和恢复分支工作,而是TPM的TM部分为AP管理全局事务的分支。最终,AP会调用TM来提交全部或不提交。

12.1.1.9 静态登记

DM 数据库支持静态登记。在开始任何工作之前为每个RM调用xa_start,即使不涉及的某些RM。

12.1.2 所需公共信息

作为资源管理器,DM数据库提供的相关信息。

表12.1 DM数据库提供的相关信息

XA特性 DM数据库信息
xa_switch_t结构 DM数据库的xa_switch_t结构名为xadmsw用于静态登记。结构包含资源管理器的入口点和其他信息
xa_switch_t资源管理器 xa_switch_t结构中的DM数据库资源管理器名称是DM_XA
关闭字符串 xa_close使用的字符串被忽略,可以是空串
打开字符串 xa_open使用的打开字符串格式描述参见“xa_open字符串定义”
使用DM XA链接应用程序所需的库,使用dmxai库,如果使用PRO*C编程则还需要dmdpc库,如果使用dpi编程则还需要dmdpi库
要求

12.2 DM XA库子程序

DM XA库子程序使得TM能够告诉DM数据库如何处理事务。通常TM必须使用xa_open打开资源。通常资源的打开是由AP调用tx_open引起的。一些TM可能在应用程序开始时隐式调用xa_open。

类似地,当应用程序使用完资源时会发生关闭(使用xa_close),关闭可能发生在AP调用tx_close或应用程序终止时。

TM指示RM执行其他几个任务,包括:

  • 启动事务并将其与事务ID关联
  • 回滚事务
  • 准备和提交事务

12.2.1 DM XA库子程序

表12.2 XA库子程序

XA子程序 描述
xa_open 连接到RM
xa_close 断开到RM的连接
xa_start 启动一个事务并将其与给定的事务ID(XID)关联,或者将该进程与现有事务关联
xa_end 从给定的过程中分离
xa_rollback 回滚给定XID的事务
xa_prepare 准备给定XID的事务。这是两阶段提交协议的第一阶段
xa_commit 提交给定XID的事务。这是两阶段提交协议的第二阶段
xa_recover 检索已准备、启发式提交或启发式回滚的事务列表
xa_forget 忽略给定XID的启发式完成事务

一般来说,AP不必关心表12.2中的子程序,只需理解XA_OPEN字符串所扮演的角色。

12.2.2 DM XA接口扩展

DM数据库的XA接口包括一些附加功能。

表12.3 XA接口的附加功能

功能 说明
int dxa_get_con(void** con) 获取当前线程上的DPI连接句柄

12.3 开发和安装XA应用程序

12.3.1 DBA或者系统管理员的职责

DBA或者系统管理员的职责如下:

  1. 在应用程序开发人员的帮助下,定义打开字符串。有关详细信息,参见“定义XA_OPEN打开字符串”。
  2. 使用打开字符串,将RM安装到TPM配置中。按照TPM供应商说明进行操作。
  3. 向系统写入XA跟踪文件和日志文件的目录授予用户ID的写入权限。
  4. 启动相关数据库实例以使DM XA应用程序处于联机状态。在启动TPM服务器之前执行此任务。

12.3.2 应用程序开发人员的职责

应用程序开发人员的职责如下:

  1. 在DBA或者系统管理员的帮助下定义打开字符串,如“定义XA_OPEN打开字符串”中描述。
  2. 开发应用程序。
  3. 根据TPM供应商的说明链接应用程序。

12.3.3 定义XA_Open打开字符串

事务监视器使用打开字符串打开数据库。

12.3.3.1 XA_Open字符串的语法

语法:

{required_field}{+required_field...}

示例:

HOST=127.0.0.1+USER=test+PWD=test12345

12.3.3.2 XA_OPEN字符串的必须字段

表12.4 XA_Open字符串的必须字段

语法成分 说明
HOST 指定所要连接的DM数据库地址
USER 指定所要创建连接的登录用户名
PWD 指定所要创建连接的登录密码

12.4 XA应用程序故障排除

12.4.1 访问DM XA的日志文件

DM XA库将所有错误记录到日志文件中。此信息在分析XA错误代码时非常有用。例如,它可以指示XA打开失败是由于错误的打开字符串还是由于登录授权失败引起的。

日志文件的名称是dm_dmxa_date.log,其中date是将信息记录到日志文件的日期。该文件被生成在应用程序所在目录上层的log目录下。例如,dm_dmxa_202010.log表示2020年10月的日志文件。

12.4.2 访问DM XA的跟踪文件

DM XA库将XA接口的调用关系记录到跟踪文件中。此信息在分析XA接口调用关系时非常有用。例如,它可以指示XA接口在何时被哪个进程的哪个线程所调用,调用的返回结果如何。

跟踪文件的名称是dm_dmxa_date.trc,其中,date是将信息记录到跟踪文件的日期。该文件被生成在应用程序所在目录上层的log目录下。需要指出的是跟踪文件生成需要在dm_svc.conf中增加全局配置项XA_TRACE=(1)。例如,dm_dmxa_202010.trc表示2020年10月的跟踪文件。

微信扫码
分享文档
扫一扫
联系客服