解决atomikos在oracle应用中的XA事务异常 Error in recovery

最近用atomikos的JTA二阶段提交解决多数据源的事务问题。服务在实验环境和测试环境下(oracle版本分别是11.2.0.1和11.2.0.2),跑起来是正常的,但当把服务部署到正式环境(oracle 11.2.0.4)后,奇怪的事情就发生了,一直打印警告 xa异常,具体的异常信息如下:

17:41:49.502  WARN 4924 --- [main] c.a.d.xa.XATransactionalResource         : Error in recovery

javax.transaction.xa.XAException: null
	at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java:703)
	at com.atomikos.datasource.xa.XATransactionalResource.recoverXidsFromXAResource(XATransactionalResource.java:554)
	at com.atomikos.datasource.xa.XATransactionalResource.recover(XATransactionalResource.java:512)
	at com.atomikos.datasource.xa.XATransactionalResource.recoverXidsFromResourceIfNecessary(XATransactionalResource.java:615)
	at com.atomikos.datasource.xa.XATransactionalResource.endRecovery(XATransactionalResource.java:583)
	at com.atomikos.icatch.imp.TransactionServiceImp.recover(TransactionServiceImp.java:558)


17:41:49.517  WARN 4924 --- [main] c.a.icatch.imp.TransactionServiceImp     : ERROR IN RECOVERY

com.atomikos.datasource.ResourceException: Error in recovery
	at com.atomikos.datasource.xa.XATransactionalResource.recoverXidsFromXAResource(XATransactionalResource.java:565)
	at com.atomikos.datasource.xa.XATransactionalResource.recover(XATransactionalResource.java:512)
	at com.atomikos.datasource.xa.XATransactionalResource.recoverXidsFromResourceIfNecessary(XATransactionalResource.java:615)
	at com.atomikos.datasource.xa.XATransactionalResource.endRecovery(XATransactionalResource.java:583)

经过排查后,定位到有可能是oracle 11.2.0.4(这个应该是商业版,不能通过官网下载的)需要自行打开XA的支持,又经过好几个小时尝试后,使用 dba账号 通过以下命令给数据源的用户授予XA权限可以解决问题。

解决方案:

grant select on sys.dba_pending_transactions to <user name>;
grant select on sys.pending_trans$ to <user name>;
grant select on sys.dba_2pc_pending to <user name>;
grant execute on sys.dbms_system to <user name>;

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值