注册
记录dm.jdbc.driver.DMException: Communication error问题处理过程
专栏/技术分享/ 文章详情 /

记录dm.jdbc.driver.DMException: Communication error问题处理过程

Song Junjie 2023/11/28 1571 8 0
摘要

一、问题背景描述

近期在某个项目中连续遇到两次:dm.jdbc.driver.DMException: Communication error的相关
报错,因此针对该问题整理了一下对应的处理思路及过程;
报错现象:
b4c1944ee78e9e4fa2a539332bb7cd9b.png

二、排查思路

针对该问题首先应该先确认以下几点:
1)报错是应用一启动就报错?
2)属于应用添加的新模块报错?

确认以上两点后我们按照两个方向来进行排查

2.1 连接问题排查

1)首先确认应用所在服务器与数据库所在服务器网络是否正常,是否存在网络丢包,以及安全组件配置?
比如:进行长ping或者防火墙、360等安全软件检查
2)确认排除网络因素后,进行数据库方面的排查
(1)检查数据库的连接数及句柄配置

select para_name, para_value from v$dm_ini where para_name like 'MAX_SESSION%';

(2)检查应用使用的jar包是否正确

java -jar Dmjdbc驱动包名称;

d79e07a49fc69133966bca63cf58d0f8.png

(3)确认应用连接的驱动是否更换成功,以及是否与达梦数据库服务端版本一致
查看客户端连接的驱动版本

select distinct clnt_ver from v$sessions;

--查询连接到数据库的是否都是更换后的这个驱动
191a50761c77e5d917a5c2fcdf775f6b.png

查看数据库版本
select * from v$instance;
348bb0965e914ae30c7af02cfacf59f1.png

建议使用和服务端一致的达梦数据库驱动,驱动位置一般存放在:$DM_HOME/drivers/jdbc下

3)排除数据库配置问题后进行应用配置及具体分析
(1)通过开启jdbc日志的方式进行排查,jdbc开启方法:

jdbc:dm://127.0.0.1?**logLevel=all&logDir=/home/dmdba/jdbclog

备注:logdir是应用的目录,建议存放在磁盘空间充足的位置,排查结束后取消上面的属性关闭jdbc日志
(2)分析报错时间段的jdbc日志
直接在日志中搜索[ERROR,如下图sql进行了执行但是10s中的之后报了下面的错:
4fe24f5d6c2d6a1167991e0fe5da9ba7.png
由上图可知是超时后会话被关闭,我们看下面的jdbc日志发现
image.png
根据上图我们可以分析到应该是代码设置了连接超时,进行查找看是否进行配置:
image.png

三、问题总结

遇到通信异常的报错,主要从三方面排查即可:
1)网络
2)驱动是否匹配
3)是否是sql耗时较长,存在连接池或者代码中配置了超时断开

--附带下达梦jdbc连接串几个连接超时的属性,供大家参考:
image.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服