散発的:java.sql.SQLException:ORA-00028:セッションが強制終了されました



Sporadic Java Sql Sqlexception



最近、新しいプロジェクトが開始されました。プロジェクトの1つは、Kafkaメッセージ消費の処理に関するものです。

ログでは、次のエラーが発生する可能性は非常に低いです。



org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData nested exception is java.sql.SQLException: Closed Connection at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:342) ~[spring-jdbc-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:366) ~[spring-jdbc-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.jdbc.support.SQLErrorCodesFactory.getErrorCodes(SQLErrorCodesFactory.java:212) [spring-jdbc-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.setDataSource(SQLErrorCodeSQLExceptionTranslator.java:134) [spring-jdbc-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.(SQLErrorCodeSQLExceptionTranslator.java:97) [spring-jdbc-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.mybatis.spring.MyBatisExceptionTranslator.initExceptionTranslator(MyBatisExceptionTranslator.java:89) [mybatis-spring-1.3.0.jar:1.3.0] at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:74) [mybatis-spring-1.3.0.jar:1.3.0] at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:447) [mybatis-spring-1.3.0.jar:1.3.0] at com.sun.proxy.$Proxy79.update(Unknown Source) [?:?] at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:295) [mybatis-spring-1.3.0.jar:1.3.0] at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:59) [mybatis-3.4.0.jar:3.4.0] at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53) [mybatis-3.4.0.jar:3.4.0] at com.sun.proxy.$Proxy83.modifyOrderStatusByOrderId(Unknown Source) [?:?] at sun.reflect.GeneratedMethodAccessor700.invoke(Unknown Source) ~[?:?] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_45] at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_45] at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333) [spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) [spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) [spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136) [spring-tx-4.3.13.RELEASE.jar:?] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) [spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] at com.sun.proxy.$Proxy84.modifyOrderStatusByOrderId(Unknown Source) [?:?] at com.xxx.retailorder.syncpostmall.service.impl.PaymentCompServiceImpl.paymentDataSync(PaymentCompServiceImpl.java:101) [PaymentCompServiceImpl.class:?] at com.xxx.retailorder.syncpostmall.service.impl.PaymentCompServiceImpl$$FastClassBySpringCGLIB$$2b9f2446.invoke() [PaymentCompServiceImpl.class:?] at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) [spring-core-4.3.13.RELEASE.jar:?] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738) [spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) [spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) [spring-tx-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282) [spring-tx-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) [spring-tx-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673) [spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] at com.xxx.retailorder.syncpostmall.service.impl.PaymentCompServiceImpl$$EnhancerBySpringCGLIB$$74a32680.paymentDataSync() [PaymentCompServiceImpl.class:?] at sun.reflect.GeneratedMethodAccessor699.invoke(Unknown Source) ~[?:?] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_45] at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_45] at com.xxx.retailorder.syncpostmall.multithread.MessageHandThread.run(MessageHandThread.java:85) [MessageHandThread.class:?] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_45] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_45] at java.lang.Thread.run(Thread.java:745) [?:1.8.0_45] Caused by: java.sql.SQLException: Closed Connection at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) ~[ojdbc14-10.2.0.2.0.jar:Oracle JDBC Driver version - '10.2.0.3.0'] at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) ~[ojdbc14-10.2.0.2.0.jar:Oracle JDBC Driver version - '10.2.0.3.0'] at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208) ~[ojdbc14-10.2.0.2.0.jar:Oracle JDBC Driver version - '10.2.0.3.0'] at oracle.jdbc.driver.PhysicalConnection.getMetaData(PhysicalConnection.java:1578) ~[ojdbc14-10.2.0.2.0.jar:Oracle JDBC Driver version - '10.2.0.3.0'] at org.apache.commons.dbcp.DelegatingConnection.getMetaData(DelegatingConnection.java:345) ~[commons-dbcp-1.4.jar:1.4] at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.getMetaData(PoolingDataSource.java:245) ~[commons-dbcp-1.4.jar:1.4] at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:331) ~[spring-jdbc-4.3.13.RELEASE.jar:4.3.13.RELEASE] ... 40 more 2018-08-29 09:02:49 739[ERROR][pool-2-thread-2][TransactionInterceptor:]:Application exception overridden by rollback exception nested exception is java.sql.SQLException: ORA-00028: your session has been killed 2018-08-29 09:02:49 748[ERROR][pool-2-thread-2][MessageHandThread:]:serviceMethod.invoke encountered an exception

ログは、ビジネスが現在割り当てられているデータベースリンクが閉じられていることを示しています。

主要なコンポーネントのバージョンと構成は次のとおりです。

org.mybatis.spring.boot mybatis-spring-boot-starter 1.1.1 commons-dbcp commons-dbcp 1.4 com.oracle ojdbc14 10.2.0.2.0 testOnBorrow=true

私はたくさんの情報をチェックしました、そして私の同僚は私がこの情報を見つけるのを手伝ってくれました: https://stackoverflow.com/questions/7350680/dbcp-returns-closed-connections

DBCPでは、最善の策は、validationQueryで戻る前に接続を検証することです。およびSELECT 1設定、例: ... ...

他の人は、DBCPは高い同時実行性があまり得意ではないと言います。したがって、Duirdに変更し、Spring-Mybatisパッケージをアップグレードして、接続プールtestOnBorrowの構成をtrueに変更します。

その後、以下の構成に変更しました。

org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.1 com.alibaba druid 1.1.10 com.oracle ojdbc14 10.2.0.2.0 2018-08-30 09:08:30 087[ERROR][Druid-ConnectionPool-Destroy-351064647][JdbcUtils:]:close connection error java.sql.SQLException: ORA-00028: your session has been killed at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) ~[ojdbc14-10.2.0.2.0.jar:Oracle JDBC Driver version - '10.2.0.3.0'] at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331) ~[ojdbc14-10.2.0.2.0.jar:Oracle JDBC Driver version - '10.2.0.3.0'] at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:283) ~[ojdbc14-10.2.0.2.0.jar:Oracle JDBC Driver version - '10.2.0.3.0'] at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:278) ~[ojdbc14-10.2.0.2.0.jar:Oracle JDBC Driver version - '10.2.0.3.0'] at oracle.jdbc.driver.T4C7Ocommoncall.receive(T4C7Ocommoncall.java:141) ~[ojdbc14-10.2.0.2.0.jar:Oracle JDBC Driver version - '10.2.0.3.0'] at oracle.jdbc.driver.T4CConnection.logoff(T4CConnection.java:465) ~[ojdbc14-10.2.0.2.0.jar:Oracle JDBC Driver version - '10.2.0.3.0'] at oracle.jdbc.driver.PhysicalConnection.close(PhysicalConnection.java:1203) ~[ojdbc14-10.2.0.2.0.jar:Oracle JDBC Driver version - '10.2.0.3.0'] at com.alibaba.druid.util.JdbcUtils.close(JdbcUtils.java:73) [druid-1.1.10.jar:?] at com.alibaba.druid.pool.DruidDataSource.shrink(DruidDataSource.java:2797) [druid-1.1.10.jar:?] at com.alibaba.druid.pool.DruidDataSource$DestroyTask.run(DruidDataSource.java:2562) [druid-1.1.10.jar:?] at com.alibaba.druid.pool.DruidDataSource$DestroyConnectionThread.run(DruidDataSource.java:2549) [druid-1.1.10.jar:?]

上記のリリース製品に変更した後、次のエラーが1日に2回発生しました。

|_+_|

明らかに、それは前のバージョンと同じではありません。今回は、閉じたリンクのsqlsessionがスレッドプールリサイクルスレッドで見つかりました。

これまで、根本的な原因は発見されていません。

次のバージョンでは、ojdbc14を10.2.0.2から10.2.0.4にアップグレードする準備ができています。