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

 

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