前言:

达梦数据库在通过程序插入具有BLOB字段的记录时(非通过SQL直接插入),报“通信异常”,通过更换达梦库驱动包解决。

问题:

在一个项目现场,在进行数据导入时,总时报“网络通信异常”:

19:08:56 ERROR - Application exception overridden by rollback exception
org.springframework.dao.DataAccessResourceFailureException: PreparedStatementCallback; SQL [INSERT INTO SCHEMA1.A(ID,REV,NAME,DEPLOYMENT_ID,BYTES,GENERATED) VALUES (?,?,?,?,?,?)]; 网络通信异常; nested exception is java.sql.SQLException: 网络通信异常at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:105)at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:649)at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:870)at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:894)
...

分析解决:

1、试验一:参照网上针对“通信异常”的处理,未能解决问题

网上针对“通信异常”的处理,较多的解决方案是在数据源的配置中增加连接探测参数,但经过测试,发现并不管用:

      testOnBorrow: true #是否打开获取连接前探测连接是否可用validationQuery: select 1 from dual #测试连接的sqltestWhileIdle: true

而且该问题能稳定重现,考虑倒是不是网络或数据库的问题,但该机器上同时部署有其他的应用,且都连接的同一数据库,其他应用工作正常。怀疑数据库是不是有什么问题,在一定条件下触发了“通信异常”,决定让现场替换数据库再试。

2、试验二:通过替换数据库,发现问题消除

将达梦7换为达梦6,问题消除。 说明数据库层面可能存在问题,一个数据库有问题,一个没有问题。于是决定寻找数据库层面的差异,考虑到是插入某个表时报异常,决定重点比较2个库中的同一名称的表是否有不同。

--DM6
CREATE TABLE "A_DB"."SCHEMA1"."A"(
"ID" VARCHAR(64),
"REV" INTEGER,
"NAME" VARCHAR(255),
"DEPLOYMENT_ID" VARCHAR(64),
"BYTES" BLOB(2147483647),
"GENERATED" NUMBER(20,0),
PRIMARY KEY("ID"),
CONSTRAINT "A_DEPL" FOREIGN KEY("DEPLOYMENT_ID") REFERENCES "B"("ID"))STORAGE( INITIAL 1 , NEXT 1 , MINEXTENTS 1 , on "PRIMARY", FILLFACTOR 0 ) ;--DM7
CREATE TABLE "SCHEMA1"."A"
(
"ID" VARCHAR2(64),
"REV" INTEGER,
"NAME" VARCHAR2(255),
"DEPLOYMENT_ID" VARCHAR2(64),
"BYTES" BLOB,
"GENERATED" NUMBER,
CONSTRAINT "A_DEPL" FOREIGN KEY("ID") REFERENCES "SCHEMA1"."B"("ID")) STORAGE(ON "SCHEMA1", CLUSTERBTR) ;
COMMENT ON COLUMN "SCHEMA1"."A"."BYTES" IS '字节流';
COMMENT ON COLUMN "SCHEMA1"."A"."DEPLOYMENT_ID" IS '流程部署ID';
COMMENT ON COLUMN "SCHEMA1"."A"."GENERATED" IS '是否引擎生成';
COMMENT ON COLUMN "SCHEMA1"."A"."ID" IS '唯一标识';
COMMENT ON COLUMN "SCHEMA1"."PT_WF_GE_BYTEARRAY"."NAME" IS '名称';
COMMENT ON COLUMN "SCHEMA1"."PT_WF_GE_BYTEARRAY"."REV" IS '版本修订';

通过比较2个表的SQL,发现一个库中的表错误地使用主键ID字段作为外键,与另一表进行关联,那么A表的插入必然依赖于B表,若B表无此ID,则A表插入将因违反约束而失败。

但修改后问题依旧。

3、试验三:使用单独的SQL插入数据库

INSERT INTO SCHEMA1.A(ID,REV,NAME,DEPLOYMENT_ID,BYTES,GENERATED)
VALUES ('TEST001',1,'测试','dep001',0x0000FFFF0A000110,0);

可以成功。

4、试验四:更换数据库驱动包

将应用包中达梦的数据库驱动包更换为最新版本,问题解决。推测,现有的驱动包可能存在什么缺陷,在处理含BLOB字段记录的插入时可能存在处理不足。有点遗憾的是,因为JDBC包较为复杂,没有足够的时间去找到真正的问题点。

达梦数据库报“网络通信异常”分析解决相关推荐

  1. 关于达梦数据库报错有歧义的列名

    关于达梦数据库报错有歧义的列名 原因是:在多表查询时,查询出的结果列字段在多表中重复出现,需要使用别名.列名查询.

  2. 解决Java连接达梦数据库报For input string: “8“的问题

    最近在搞项目国产化适配,要把公司的老项目从Oracle转到达梦数据库,公司的老项目,数据库驱动什么的都是已经准备好的,也就没有多想,直接就改数据源启动,谁知道竟然报数字转换异常,一时摸不到头绪,最后发 ...

  3. 达梦数据库修改字段长度_解决达梦数据库新增大字段报错问题

    使用达梦数据库穿件新表后往新表中增加TEXT类型字段报错,错误信息如下: 错误号: -3243 错误消息: 第1 行附近出现错误: 表[TABLE_2]中不能同时包含聚集KEY和大字段 ------- ...

  4. 银河麒麟V10系统无法调用达梦数据库图形化工具的解决办法

    近期,在部署及使用达梦数据库时,发现了无法调用图形化工具界面的问题,首先先确认了图形化服务是正常的,使用root用户可以正常调用图形化界面,但使用dmdba却无法调用,在经过一段时间的尝试后,终于发现 ...

  5. 达梦数据库报错“[警告]Error Code:-70037,字符串不完整”

    [问题描述]: 使用管理工具或dexp导出数据的时候报"[警告]Error Code:-70037,字符串不完整",导致表的数据没有导出或者导出的数据不完整.如下图所示: [问题解 ...

  6. 达梦数据库报错有歧义的列名

    在多表查询时,查询出的结果列字段在多表中重复出现,需要使用别名.列名查询. 特殊情况是,重复字段出现在${ew.customSqlSegment}里面,导致无法更改,这时可以修改from后表使其不包含 ...

  7. Liquibase集成达梦数据库、Activiti集成达梦数据库

    Liquibase集成达梦数据库 一.Liquibase适配达梦数据库 Jhipster项目下,Liquibase集成达梦数据库会报一系列错误,例如: 类型不支持.数据库字段使用到了保留字.主键自增等 ...

  8. MySQL适配达梦数据库注意事项

    问题说明:达梦数据库jdbc驱动无法下载 问题说明:达梦数据库jdbc驱动版本 问题说明:hibernate方言驱动 问题说明:达梦不支持mysql默认时间函数 问题说明:达梦数据库不支持LAST_I ...

  9. 达梦数据库 网络通信异常 6001

    **达梦数据库 网络通信异常 6001 网络连接错误 ** 解决方案: 1:查看用户名密码是否正确 达梦数据库默认用户名和密码是大写的SYSDBA/SYSDBA 用户修改密码后,密码中有特殊字符,比如 ...

最新文章

  1. GDCM:gdcm::Parser的测试程序
  2. 【知识小课堂】 mongodb 之字段中的【 数组】、【内嵌文档】
  3. 关于DNS区域查询,DNS字典爆破,以及查询文件问题
  4. php命令执行无法重定向输出,php – CodeIgniter 3重定向功能无法正常工作
  5. continue 与break 的区别
  6. zen3架构_AMD YES! Zen3架构亮相,消费者CPU市场的竞争热闹了
  7. IntelliJ IDEA 导入新项目以后的简单配置
  8. Maven分布式工程-分页查询(一)
  9. 非堵塞socket实现android手机与PC的文件传输
  10. Android使用局域网打印机生成打印任务
  11. delphi删除文本内容_文本编辑器EmEditor快捷键指令
  12. 祝福老婆今晚不要太生气
  13. ubuntu18.04上使用7z分卷压缩和解压
  14. ITUNE清理“其他”的内容
  15. springboot和redis处理页面缓存
  16. Java语法基本概念
  17. 【华人学者风采】查正军 中国科学技术大学
  18. HUAWEI 中级网络工程师
  19. ASP.NET动态网站课程设计——个人网页
  20. Flink1.11 intervalJoin watermark生成,状态清理机制源码理解Demo分析

热门文章

  1. Inskeep – 一个优秀的Instagram图片保存工具
  2. Maven中的scope总结
  3. meshgrid方法
  4. linux 系统运维日常巡检脚本参考
  5. W32/Pate.a 病毒处理小记
  6. 夜间玩手机对眼睛的损伤很大,如何减少伤害呢?
  7. Oracle Database 11g安装时显示[INS-13001]环境不满足最低要求。
  8. js 对象不支持此属性或方法
  9. 一个相当low得http调用
  10. Linux常用的命令--60个命令总结汇总