解决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>;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章