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

2023-10-26

前言:

    达梦数据库在通过程序插入具有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 #测试连接的sql
      testWhileIdle: 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包较为复杂,没有足够的时间去找到真正的问题点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 深入了解golang 的channel

    文章目录 1 channel 是什么 channel的特点 2 channel 的数据结构 hchan 等待队列和发送队列的类型包装 sudog 3 channel 分类 有缓冲channel 无缓冲channel 4 channel 的创
  • STOCHRSI 指标理解

    STOCHRSI 指标理解 这几天帮一个朋友解决一个关于指标的问题 这个指标就是 STOCHRSI 在网上查了很多资料 中文的真是甚少 而且仅有的也不是讲的很清楚 对于我这样的 交易小白 简直是天书 不过只要研究多少会有点收获的 下面分享下
  • 7月7日下午!GLM大模型技术前沿与应用探索

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入 随着AIGC时代的到来 大型语言模型逐渐成为学术界和工业界的关注焦点 近期 各种大语言模型的涌现给自然语言处理领域的研究带来了诸多挑战 也逐渐对计算机视觉和计算机生物等领域产生了
  • 解析CAN的J1939协议PDU报文

    PF用来确定PDU格式 0 239表示PDU1格式 240 255表示格式2 PDU1格式报文表示向特定或全局地址发送 PDU2格式报文表示向全局地址发送 PS由PF决定其含义 DA表示报文要发送的目标地址 GE表示PS在PDU2中与PF的
  • 面试官问你为什么选择做客服_在线客户服务-您的选择

    面试官问你为什么选择做客服 On the Web news travels fast and a good customer testimonial is worth its weight in gold If a client feels

随机推荐

  • Java并发编程实战——彻底理解volatile

    文章目录 volatile作用 volatile实现原理 volatile的happens before关系 volatile的内存语义 volatile重排序与JMM内存屏障 volatile的使用误区 volatile的适用场景 vol
  • CI/CD一般流程图

    CI CD的流水线一般由按照一定的逻辑组织工具 下面是一个逻辑图串联工具形成的一个典型的CI CD流程 工具 Bitbucket 代码托管工具 Jenkins 编译工具 Docker 打包工具 Slack Email 通知工具 Artifa
  • .net mvc + vuejs 的项目结构

    net项目结构 程序目录结构 vue操作 前提 安装npm vue vue cli 1 进入控制台窗口 2 进入程序目录 3 运行 vue init webpack webjs 生成webjs及其子目录 4 cd webjs 5 npm i
  • 使用V C ++ 向.exe文件中写入资源

    使用V C 向 exe文件中写入资源 BOOL result HANDLE hFile CreateFile c test htm GENERIC READ FILE SHARE READ NULL OPEN EXISTING FILE A
  • Linux虚拟机增加内存后扩展swap空间( insufficient virtual memory,please increase swap space)

    虚拟内存 swap 的基本概念 虚拟内存 swap 就是将硬盘规划出一个区 间 让内存的数据可以经由硬盘来读取 swap工作原理是 当物理内存不够时 则某些在内存当中所占的程序会暂时被 移动到 swap 中 让物理内存可以被更需要的程序来优
  • 在Qt项目中添加pri文件

    在Qt项目框架里 很多人都喜欢用pri文件来管理项目 那么今天就来讲讲这个pri文件 目录 前言 创建pri文件的步骤 一 创建Qt项目 二 创建pri空文件 三 调试 前言 一般我们创建Qt项目工程的时候 都是直接把所有的项目 头文件和资
  • Qt 添加其他目录的资源文件

    添加App目录资源文件的方法 首先 添加 qrc文件 Add New xxx qrc 其次 在qrc文件上添加存在的目录 或者文件 添加其他目录资源文件的方法 如下图步骤
  • 网易一面,痛失30K:为啥用阻塞队列,list不行吗?

    程序员的成长之路 互联网 程序员 技术 资料共享 关注 阅读本文大概需要 5 5 分钟 来自 技术自由圈 本文目录 说在前面 1 什么是阻塞队列 2 主要并发队列关系图 3 阻塞队列和 List Set 的区别是什么 4 阻塞队列和普通Qu
  • Python之time模块

    目录 1 引言 2 时间戳与时间元组 2 1时间戳 2 2时间元组 3 时间格式化 3 1获取格式化的时间 3 2自定义格式化 4 附录 4 1重要函数 4 2参考 1 引言 Python 提供了一个 time模块来格式化时间 在pytho
  • Dockerfile镜像搭建实例+镜像构建LNMP

    Dockerfile镜像搭建实例 镜像构建LNMP 文章目录 Dockerfile镜像搭建实例 镜像构建LNMP 构建SSH镜像 构建Systemctl镜像 构建tomcat镜像 搭建LNMP 环境准备 拉取centos 7镜像 自定义网络
  • SpringBoot整合Mybatis实现商品评分

    前言 当今的电商平台越来越依赖于用户评分 以确定一个商品在市场中的竞争力和口碑 而SpringBoot整合Mybatis plus是非常适用于这一功能的框架 本文将介绍在SpringBoot应用中整合Mybatis plus框架 实现对商品
  • Android 沉浸式状态栏与隐藏导航栏

    一般我们在Android的APP开发中 APP的界面如下 可以看到 有状态栏 ActionBar ToolBar 导航栏等 一般来说 APP实现沉浸式有三种需求 沉浸式状态栏 隐藏导航栏 APP全屏 沉浸式状态栏是指状态栏与ActionBa
  • 长文详解HiveSQL执行计划

    本文目录 一 前言二 SQL的执行计划 2 1 explain 的用法 2 2 explain 的使用场景 案例一 join 语句会过滤 null 的值吗 案例二 group by 分组语句会进行排序吗 案例三 哪条sql执行效率高呢 案例
  • 人工测试之代码检查、走查与评审

    人工测试方法 代码检查 代码走查 桌面检查 同行评审 代码检查与代码走查的联系 1 要求人们组成一个小组来完阅读或直观检查特定的程序 找出错误 但不必改正错误 2 都是对过去桌面检查过程 在提交测试前 由程序员阅读自己程序的过程 的改进 3
  • Mac m1上使用docker搭建C++开发调试环境

    说明 因为mac上虚拟机都不太好用 有些还收费 故使用docker来搭建虚拟机 况且我的Mac是m1芯片 用的是arm架构 虚拟机更是少 搭建本机与虚拟机互通 mac上docker与linux不同 mac上实际上内部是建了个linux的虚拟
  • 在编写Java程序时,图片不显示的问题

    可能有几种原因导致图片无法正常显示 图片路径不正确 如果图片的路径错误或不存在 程序将无法找到图片并将其加载到内存中 在Java中 可以使用相对路径或绝对路径来指定图片路径 应根据实际情况进行调整 图片格式不支持 如果图片格式不受Java支
  • JAVA--泛型

    一 概念 1 定义 在定义类或接口通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型 2 引入 从JDK1 5后 Java引入 参数化类型 概念 即在创建集合时指定可以再指定元素类型 3 优点 a 解决元素存储的安全性问题
  • Linux中怎么创建文件?

    众所周知 在Windows系统中可以直接右键新建文件 而在Linux系统中 想要创建文件并非易事 需要通过执行命令来完成 那么Linux系统中创建文件常用的方法有哪些 本文为大家介绍一下Linux系统下创建文件的8种方法 快来了解一下吧 1
  • Impala与Hive的比较

    http tech uc cn p 1803
  • 达梦数据库报“网络通信异常”分析解决

    前言 达梦数据库在通过程序插入具有BLOB字段的记录时 非通过SQL直接插入 报 通信异常 通过更换达梦库驱动包解决 问题 在一个项目现场 在进行数据导入时 总时报 网络通信异常 19 08 56 ERROR Application exc