为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: DM8
【操作系统】:启云
【CPU】:
【问题描述】*:
应用程序通过以下语句获取数据表元数据信息抛出 session request timeout 异常,执行其它语句均正常,该语句在 DM 客户端中执行也是正常且是秒出。
报错语句
SELECT
TAB2.*,
COMT."COMMENT$" AS TABLE_COMMENT
FROM
(
SELECT
OWNER AS SCHEMA_NAME,
TABLE_NAME
FROM
ALL_TABLES
WHERE
OWNER NOT IN ('SYS', 'CTISYS')
UNION
SELECT
OWNER AS SCHEMA_NAME,
VIEW_NAME AS TABLE_NAME
FROM
ALL_VIEWS
WHERE
OWNER NOT IN ('SYS', 'CTISYS')
) AS TAB2
LEFT JOIN SYS.SYSTABLECOMMENTS AS COMT
ON
TAB2.SCHEMA_NAME = COMT.SCHNAME
AND TAB2.TABLE_NAME = COMT.TVNAME
ORDER BY
TAB2.SCHEMA_NAME,
TAB2.TABLE_NAME
报错异常堆栈信息
java.lang.RuntimeException: org.springframework.dao.DataIntegrityViolationException:
### Error querying database. Cause: dm.jdbc.driver.DMException: session request timeout
### The error may exist in URL [jar:file:/opt/apps/dmga-dg-fat-service/lib/dmga-dg-metadata-4.2.2-SNAPSHOT.jar!/com/dm/dg/metadata/dialect/domain/Dm7Dialect.xml]
### The error may involve com.dm.dg.metadata.dialect.dm7.listTables-Inline
### The error occurred while setting parameters
### SQL: SELECT TAB2.*, COMT."COMMENT$" AS TABLE_COMMENT FROM (SELECT OWNER AS SCHEMA_NAME, TABLE_NAME FROM ALL_TABLES WHERE OWNER NOT IN ('SYS', 'CTISYS') UNION SELECT OWNER AS SCHEMA_NAME, VIEW_NAME AS TABLE_NAME FROM ALL_VIEWS WHERE OWNER NOT IN ('SYS', 'CTISYS') ) AS TAB2 LEFT JOIN SYS.SYSTABLECOMMENTS AS COMT ON TAB2.SCHEMA_NAME = COMT.SCHNAME AND TAB2.TABLE_NAME = COMT.TVNAME ORDER BY TAB2.SCHEMA_NAME, TAB2.TABLE_NAME
### Cause: dm.jdbc.driver.DMException: session request timeout
; SQL []; session request timeout; nested exception is dm.jdbc.driver.DMException: session request timeout
org.springframework.dao.DataIntegrityViolationException:
### Error querying database. Cause: dm.jdbc.driver.DMException: session request timeout
### The error may exist in URL [jar:file:/opt/apps/dmga-dg-fat-service/lib/dmga-dg-metadata-4.2.2-SNAPSHOT.jar!/com/dm/dg/metadata/dialect/domain/Dm7Dialect.xml]
### The error may involve com.dm.dg.metadata.dialect.dm7.listTables-Inline
### The error occurred while setting parameters
### SQL: SELECT TAB2.*, COMT."COMMENT$" AS TABLE_COMMENT FROM (SELECT OWNER AS SCHEMA_NAME, TABLE_NAME FROM ALL_TABLES WHERE OWNER NOT IN ('SYS', 'CTISYS') UNION SELECT OWNER AS SCHEMA_NAME, VIEW_NAME AS TABLE_NAME FROM ALL_VIEWS WHERE OWNER NOT IN ('SYS', 'CTISYS') ) AS TAB2 LEFT JOIN SYS.SYSTABLECOMMENTS AS COMT ON TAB2.SCHEMA_NAME = COMT.SCHNAME AND TAB2.TABLE_NAME = COMT.TVNAME ORDER BY TAB2.SCHEMA_NAME, TAB2.TABLE_NAME
### Cause: dm.jdbc.driver.DMException: session request timeout
; SQL []; session request timeout; nested exception is dm.jdbc.driver.DMException: session request timeout
at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:102)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:82)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:82)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
at com.sun.proxy.$Proxy46.selectList(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:230)
at com.dm.wmf.core.dataaccess.dao.impl.SqlDaoMyBatisImpl.list(SqlDaoMyBatisImpl.java:68)
at com.dm.dg.metadata.dialect.impl.Dm7Dialect.getTables(Dm7Dialect.java:43)
at com.dm.dg.metadata.util.DialectUtil.getTables(DialectUtil.java:209)
at com.dm.dg.metadata.util.DialectUtil.getTables(DialectUtil.java:193)
at com.dm.dg.metadata.dataset.service.impl.RdbmsDatasetServiceImpl.getRemoteDataSet(RdbmsDatasetServiceImpl.java:90)
at com.dm.dg.metadata.util.DataSetServiceUtil.defaultDiffInLocal(DataSetServiceUtil.java:118)
at com.dm.dg.metadata.util.DataSetServiceUtil.diffInLocalWithPatternTableName(DataSetServiceUtil.java:83)
at com.dm.dg.metadata.dataset.service.impl.RdbmsDatasetServiceImpl.getTablesWithCollectedTag(RdbmsDatasetServiceImpl.java:80)
at com.dm.dg.metadata.dataset.service.impl.RdbmsDatasetServiceImpl.getRemoteTablesDetail(RdbmsDatasetServiceImpl.java:387)
at com.dm.dg.metadata.dataset.service.impl.RdbmsDatasetServiceImpl.syncRdbmsDataset(RdbmsDatasetServiceImpl.java:121)
at com.dm.dg.metadata.dataset.service.impl.RdbmsDatasetServiceImpl.createTableByConfig(RdbmsDatasetServiceImpl.java:478)
at com.dm.dg.metadata.dataset.service.impl.RdbmsDatasetServiceImpl$$FastClassBySpringCGLIB$$fe750200.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673)
at com.dm.dg.metadata.dataset.service.impl.RdbmsDatasetServiceImpl$$EnhancerBySpringCGLIB$$240f17d6.createTableByConfig(<generated>)
at com.dm.dg.metadata.generatetable.adapter.RdbmsGenerateTable.generate(RdbmsGenerateTable.java:96)
at com.dm.dg.metadata.datasource.servicewrapper.impl.DataSourceServiceWrapperImpl.createTableByConfig(DataSourceServiceWrapperImpl.java:954)
at com.dm.dg.metadata.datasource.servicewrapper.impl.DataSourceServiceWrapperImpl.autoCreateDataset(DataSourceServiceWrapperImpl.java:799)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: dm.jdbc.driver.DMException: session request timeout
at dm.jdbc.driver.DBError.throwException(DBError.java:696)
at dm.jdbc.b.b.o.E(MSG.java:560)
at dm.jdbc.b.b.o.B(MSG.java:520)
at dm.jdbc.b.b.o.A(MSG.java:501)
at dm.jdbc.b.a.a(DBAccess.java:230)
at dm.jdbc.b.a.b(DBAccess.java:908)
at dm.jdbc.b.a.a(DBAccess.java:779)
at dm.jdbc.driver.DmdbPreparedStatement.executeInner(DmdbPreparedStatement.java:378)
at dm.jdbc.driver.DmdbPreparedStatement.do_execute(DmdbPreparedStatement.java:466)
at dm.jdbc.driver.DmdbPreparedStatement.execute(DmdbPreparedStatement.java:1836)
at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)
at sun.reflect.GeneratedMethodAccessor320.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)
at com.sun.proxy.$Proxy63.execute(Unknown Source)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:63)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:326)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:143)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)
at com.sun.proxy.$Proxy61.query(Unknown Source)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
at sun.reflect.GeneratedMethodAccessor349.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433)
... 57 more
获取元数据的语句一般是从系统表相关字段封装而来,具体因版本存在差异,可以在连接URL中增加logLevel=all&logDir=d:\jdbclog参数来将调试信息打印到日志文件中,同时可以关注Server侧是否存在系统表等待情况
该问题最后是通过调整jdbc驱动版本解决,应用程序与数据库的jdbc驱动版本一致后就没有该问题了。
这个账户没做任何资源及会话限制,但是就经常抛出这个错误。