Oracle XAException - Ошибка восстановления XA - PullRequest
1 голос
/ 21 февраля 2012

Я только что начал использовать bitronix для jta в моей установке spring / hibernate, и все нормально работает в H2 и Postgres, но не работает в Oracle.

Я следил за другими публикациями в Интернете о предоставлении привилегий, но проблема все еще сохраняется.Любые идеи о том, как это исправить?

Я установил эти разрешения:

GRANT SELECT ON sys.dba_pending_transactions TO user;
GRANT SELECT ON sys.pending_trans$ TO user;
GRANT SELECT ON sys.dba_2pc_pending TO user;
GRANT EXECUTE ON sys.dbms_system TO user:

И все еще получил эту ошибку

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in class path resource [spring/liquibaseContext.xml]: Invocation of init method failed; nested exception is org.hibernate.JDBCException: Error updating database
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:282)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:204)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
    at com.xxxx.spring.config.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:19)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3934)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4429)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:630)
    at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:556)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:491)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1206)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:516)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: org.hibernate.JDBCException: Error updating database
    at com.xxx.db.liquibase.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:288)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
    ... 37 more
Caused by: java.sql.SQLException: unable to get a connection from pool of a PoolingDataSource containing an XAPool of resource xaDataSource with 5 connection(s) (5 still available) -failed-
    at bitronix.tm.resource.jdbc.PoolingDataSource.getConnection(PoolingDataSource.java:252)
    at com.xxxx.db.liquibase.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:280)
    ... 39 more
Caused by: bitronix.tm.internal.BitronixRuntimeException: incremental recovery failed when trying to acquire a connection from failed resource 'xaDataSource'
    at bitronix.tm.resource.common.XAPool.getConnectionHandle(XAPool.java:109)
    at bitronix.tm.resource.common.XAPool.getConnectionHandle(XAPool.java:97)
    at bitronix.tm.resource.jdbc.PoolingDataSource.getConnection(PoolingDataSource.java:248)
    ... 40 more
Caused by: bitronix.tm.recovery.RecoveryException: failed recovering resource xaDataSource
    at bitronix.tm.recovery.IncrementalRecoverer.recover(IncrementalRecoverer.java:104)
    at bitronix.tm.resource.common.XAPool.getConnectionHandle(XAPool.java:106)
    ... 42 more
Caused by: javax.transaction.xa.XAException
    at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java:709)
    at bitronix.tm.recovery.RecoveryHelper.recover(RecoveryHelper.java:103)
    at bitronix.tm.recovery.RecoveryHelper.recover(RecoveryHelper.java:61)
    at bitronix.tm.recovery.IncrementalRecoverer.recover(IncrementalRecoverer.java:64)
    ... 43 more

Ответы [ 2 ]

1 голос
/ 05 августа 2015

Я не уверен, как изначально была решена проблема.

Однако я также получал ту же ошибку, и с помощью дополнительного запроса ниже проблема была решена.

grant execute on dbms_xa to <user>; --(If using Oracle 10.2.0.4 or higher JDBC driver)

Ссылка

1 голос
/ 13 апреля 2012

Я вижу две причины этой проблемы:

1) Oracle недавно изменила набор привилегий

2) Вы не дали должным образом права пользователю, для которого настроен пул соединений.

Если проблема (1), вы должны предоставить точную версию используемого вами DB и драйвера JDBC, тогда мы сможем увидеть, что нужно сделать, чтобы эта комбинация работала

Если это (2), вам следует дважды проверить привилегии вашего пользователя. Самый простой и безопасный способ сделать это - подключиться к БД с помощью клиента JDBC (например, Squirrel SQL) и проверить, что вы можете выбрать один из трех представлений, которые вы упомянули выше, а также попытаться проверить, можете ли вы выполнить одну из систем dbms_system. хранимые процедуры.

...