Skip to content

Instantly share code, notes, and snippets.

@almaz-uno
Last active October 7, 2016 11:06
Show Gist options
  • Save almaz-uno/81b54de57a890121a0d1b3862d3ba96e to your computer and use it in GitHub Desktop.
Save almaz-uno/81b54de57a890121a0d1b3862d3ba96e to your computer and use it in GitHub Desktop.

Ошибка XAER RMERR

При использовании распределенных транзакций в IBM WAS с Oracle DB возникают ошибки XAER_RMERR. Ниже покажем, как их чиниить. Описание Логи забиваются сообщениями об ошибках:

2013-06-04 13:58:57,363 ERROR [com.ibm.ws.Transaction.JTA.XARminst] v9.2.0.184049 (vyp2-was2 Default : DMN0) WTRN0037W: Служба транзакций обнаружила ошибку в операции xa_recover. 
Ресурс: com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl@15971597. 
Код ошибки: XAER_RMERR. 
Трассировка стека исключительной ситуации: javax.transaction.xa.XAException
at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java:709)
at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.recover(WSRdbXaResourceImpl.java:1088)
at com.ibm.ws.Transaction.JTA.XARminst.recover(XARminst.java:141)
at com.ibm.ws.Transaction.JTA.XARecoveryData.recover(XARecoveryData.java:626)
at com.ibm.tx.jta.PartnerLogTable.recover(PartnerLogTable.java:389)
at com.ibm.tx.jta.RecoveryManager.resync(RecoveryManager.java:1530)
at com.ibm.tx.jta.RecoveryManager.performResync(RecoveryManager.java:2265)
at com.ibm.ws.tx.jta.RecoveryManager.performResync(RecoveryManager.java:114)
at com.ibm.tx.jta.RecoveryManager.run(RecoveryManager.java:2218)
at java.lang.Thread.run(Thread.java:736)

2013-06-04 13:58:57,363 WARN [com.ibm.tx.jta.XARecoveryData] v9.2.0.184049 (vyp2-was2 Default : DMN0) WTRN0146I: Получены 0 xid от xa_recover в XAResource: paymentsDataSource, 0 из которых будут обработаны сервером

Объяснение

Oracle требуются специальные права для выполнения очистки после ошибки транзакции.

Решение

выполнить команды как пользователь SYS:

grant select on pending_trans$ to <user>;
grant select on dba_2pc_pending to <user>;
grant select on dba_pending_transactions to <user>;
grant execute on dbms_xa to <user>; 

(If using Oracle 10.2.0.4 or higher JDBC driver)

где <user> - имя пользователя в используемом источнике данных. Вариант с переменными подстановки:

define u = '<user>';
 
GRANT SELECT ON pending_trans$ TO &&u;
GRANT SELECT ON dba_2pc_pending TO &&u;
GRANT SELECT ON dba_pending_transactions TO &&u;
GRANT EXECUTE ON dbms_xa TO &&u;

Подробнее: http://www-01.ibm.com/support/docview.wss?uid=swg21196663

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment