`
dyllove98
  • 浏览: 1409634 次
  • 性别: Icon_minigender_1
  • 来自: 济南
博客专栏
73a48ce3-d397-3b94-9f5d-49eb2ab017ab
Eclipse Rcp/R...
浏览量:39191
4322ac12-0ba9-3ac3-a3cf-b2f587fdfd3f
项目管理checkList...
浏览量:80270
4fb6ad91-52a6-307a-9e4f-816b4a7ce416
哲理故事与管理之道
浏览量:133394
社区版块
存档分类
最新评论

一个XA事务问题解决小结

阅读更多
最近在项目中遇到一个有关XA事务问题。对于何为XA事务我也说不太清楚,我现在的理解是一个需要横跨多个数据库甚至多类型数据库的操作。这个问题费尽周折终告解决,对于该问题的全程解决网上并没有整理完全的东西,高兴之余整理出来与大家共享。

问题描述:某操作需要更新多个表,而这些表又分别分散在SQL SERVER和DB2的多个库当中(相关技术实现java、websphere)。使用SLSB(无状态Session Bean)做该项操作事务处理。结果执行过程中,所有SQL均可成功执行,但操作无法通过。报错信息为在执行SQL SERVER的SQL时(在全局事务中发生非法尝试使用多个仅有一阶段能力的资源,方法 enlist 捕捉到 com.ibm.ws.Transaction.IllegalResourceIn2PCTransactionException,当尝试使用事务管理器为当前事务从数据源 XXX 将资源加入列表时(具体错误略)),然后在整个事务提交时报错(处理方法 allocateMCWrapper 时应该存在活动的事务,处理方法 initializeForUOW 时应该存在活动的事务。com.ibm.ws.Transaction.IllegalResourceIn2PCTransactionException,org.omg.CORBA.TRANSACTION_ROLLEDBACK: javax.transaction.TransactionRolledbackException)。表现结果为SQL SERVER的对应SQL成功执行并提交,DB2的SQL成功执行但未提交。

处理过程详细说明:

在WEBSPHERE管理台将DB2数据源建为XA类型数据源,并成功测试连接。但在将SQLSERVER数据源建为XA数据源时报错(未能找到存储过程 'master..xp_jdbc_open2'),无奈SQLSERVER仍用普通数据源。运行结果所有SQL均成功执行但全部无法提交,报错内容(发生试探非法用现有两阶可用资源提交一阶可用资源,org.omg.CORBA.TRANSACTION_ROLLEDBACK: javax.transaction.TransactionRolledbackException)。
解决如何添加SQLSERVER(XA)类型数据源。从网上下载SQLSERVER支持XA驱动,可从ftp://ftp.software.ibm.com/software/websphere/info/tools/DataDirect/datadirect.htm 查看说明并下载,根据说明与本机器配置将适合的sqljdbc.dll文件放入SQL SERVER安装目录的BINN目录下,并对master库执行包中SQL脚本instjdbc.sql。成功执行后启动本机“Distributed Transaction Coordinator”服务,如无法成功启动,在运行中执行命令“msdtc -resetlog”再尝试启动。然后尝试添加SQLSERVER(XA)类型数据源,结果无法连接,报错(xa_open (0) returns -3DSRA0010E: SQL 状态 = HY000,错误代码 = 20,001)。此时应检查注册表中分支HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security中XATransactions的键值,应改为1(非0值)用以设置XA事务可用。设置完成后重启DTC服务、SQL SERVER以及WEBSPHERE使设置完全生效。然后测试可正常连接。
做过上述设置后,程序在WEBSPHERE中可完全支持横跨DB2、SQL SERVER多个数据库之间的全局事务。

祝以后遇到这个问题的所有人好运!
分享到:
评论

相关推荐

    WebSphere MQ与Oracle 数据库的XA事务(两阶段提交)实现

    当多个MQ队列参与同一个事务时,就需要使用到XA事务。在这种情况下,事务协调器(通常是MQ本身)负责协调所有参与队列,确保它们要么全部完成,要么全部回滚。这使得跨多个队列的操作具有原子性,是保证数据一致性的...

    xa分布式事务处理

    分布式事务处理是解决多数据库系统中一致性问题的关键技术,而X/Open Distributed Transaction Processing (DTP)模型和XA规范是这一领域的重要理论基础和实现标准。X/Open组织,现称为Open Group,于1994年提出了DTP...

    mysql分布式事务实现 MySQL XA pdf

    XA是一个由X/Open组织定义的标准,它定义了事务管理器和资源管理器之间通信的接口。MySQL从5.1版本开始支持XA接口,从而能够参与到分布式事务处理中。 #### 六、MySQL XA MySQL服务器作为资源管理器,在分布式事务...

    掌握分布式事务的艺术:深入MySQL XA事务处理

    以下是一个使用 XA 事务的示例,展示如何在两个 MySQL 实例中协调事务: ##### 5.1 开始和结束事务 ```sql -- 在实例 1 中 XA START 'global-transaction-1'; UPDATE accounts SET balance = balance - 100 WHERE ...

    分布式事务常用的解决方案,XA,Saga,TCC,MQ补偿.docx

    如果 Saga事务中的任何一个小事务失败,整个Saga事务都会回滚。Saga事务可以确保分布式事务的一致性和可靠性,但是它的实现复杂度较高。 TCC(Try-Confirm-Cancel)是指分布式事务处理的补偿事务模型。TCC事务由三...

    MySQL 外部XA及其在分布式事务中的应用分析

    xid_cache是一个内存表,用于暂存处于预备状态的外部XA事务的事务ID(xid)。在崩溃恢复过程中,MySQL的存储引擎需要检查处于XA_PREPARED状态的事务,并将这些事务ID收集起来。内部XA事务的处理依赖于binlog中的记录...

    使用Atomikos处理ActiveMQ在Spring环境的XA事务

    Atomikos是Java平台上的一个强健的事务管理解决方案,它支持JTA(Java Transaction API)标准,可以处理复杂的分布式事务场景。 首先,我们需要理解什么是XA事务。XA事务是一种两阶段提交(2PC)协议,用于协调跨多...

    JDBC事务和JTA(XA)事务

    在JDBC中,默认情况下,每个SQL语句都是一个独立的事务,为了将多个SQL语句组合成一个事务,需要将auto-commit模式屏蔽掉。这样,多个SQL语句可以被组合成一个事务,并且可以使用commit()方法来确认事务。 使用JDBC...

    Mysql事务控制(XA分布式事务)和锁定语句

    - `XA {START|BEGIN} xid [JOIN|RESUME]`:用于启动一个具有指定xid值的分布式事务。`xid`由三部分组成:全局事务标识符`gtrid`、分支限定符`bqual`以及格式标识`formatId`。 - `XA END xid [SUSPEND [FOR MIGRATE]]...

    多数据源动态切换及XA分布式事务Java实现v1.0.zip

    使用Atomikos支持分布式事务,Spring+Mybatis+Druid+AtomikosDataSource 使用手册: https://www.yuque.com/itman/wosfkn/mreame

    JMS MDB 与 XA 事务-002

    MDB是Java EE容器中的一个特殊类型的EJB(Enterprise JavaBean),它专门用于处理来自JMS队列或主题的消息。MDB的主要优点在于其异步处理能力,可以解耦发送和接收消息的组件,提高系统的响应性和可扩展性。在JMS中...

    mysql的XA事务恢复过程详解

    因此,对于一个生产环境的MySQL服务器,确保所有事务在系统关闭时都得到了适当的清理是非常重要的,以避免启动时的恢复过程和潜在的数据不一致性问题。 总之,MySQL的XA事务恢复过程是一个复杂的过程,涉及到对...

    分布式事务之Seata XA AT实战代码

    在AT模式下,库存服务和订单服务都会在本地开启一个事务,然后向Seata服务器注册这个全局事务。 在`seata-order`的代码中,首先会调用库存服务的接口尝试扣减库存,如果成功,则继续创建订单。这个过程中,Seata会...

    TDDL加入XA事务提交类图

    TDDL加入XA两阶段事务提交,本人自己跟代码画的这些图,从原公司离职没有保存代码,希望这个图可以给研究TDDL的朋友一些启发

    分布式事务分类,xa,at,tcc,sega

    3. **隔离性(Isolation)**:并发执行的事务之间不会互相干扰,即一个事务内部的操作对其他并发事务来说是隔离的。 4. **持久性(Durability)**:一旦事务完成,它对数据库所做的更改就是永久性的。 **CAP理论**...

    XA与非XA驱动差异

    当应用程序需要同时操作多个数据库或其他资源时(例如消息队列、文件系统等),并且要求这些操作作为一个整体成功或失败时,就需要使用XA驱动来确保事务的一致性。 ##### 2. 技术实现与应用场景 - **技术实现**: ...

    Distributed Transaction Processing The XA Specification.pdf

    1. 分布式事务处理模型:XA规范定义了一个分布式事务处理模型(X/Open DTP Model),它将事务处理过程中的不同组件之间的接口进行了标准化。该模型包括了应用程序、事务管理器、资源管理器和通信资源管理器。 2. ...

    mysql跨库事务XA操作示例

    在PHP中,我们可以创建多个数据库连接对象,每个连接对应一个数据库,然后使用相同的XID(全局事务标识符)来标识这些操作属于同一个事务。以下是一个示例: 1. 创建数据库连接,如`$dbtest1`和`$dbtest2`分别连接...

Global site tag (gtag.js) - Google Analytics