近期在某个项目中连续遇到两次:dm.jdbc.driver.DMException: Communication error的相关
报错,因此针对该问题整理了一下对应的处理思路及过程;
报错现象:
针对该问题首先应该先确认以下几点:
1)报错是应用一启动就报错?
2)属于应用添加的新模块报错?
确认以上两点后我们按照两个方向来进行排查
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驱动包名称;
(3)确认应用连接的驱动是否更换成功,以及是否与达梦数据库服务端版本一致
查看客户端连接的驱动版本
select distinct clnt_ver from v$sessions;
--查询连接到数据库的是否都是更换后的这个驱动
查看数据库版本
select * from v$instance;
建议使用和服务端一致的达梦数据库驱动,驱动位置一般存放在:$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中的之后报了下面的错:
由上图可知是超时后会话被关闭,我们看下面的jdbc日志发现
根据上图我们可以分析到应该是代码设置了连接超时,进行查找看是否进行配置:
遇到通信异常的报错,主要从三方面排查即可:
1)网络
2)驱动是否匹配
3)是否是sql耗时较长,存在连接池或者代码中配置了超时断开
--附带下达梦jdbc连接串几个连接超时的属性,供大家参考:
文章
阅读量
获赞