JDBC驱动oceanbase-client,版本2.2.10.2,批量插入8000+数据出现如下报错什么原因?

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】JDBC驱动oceanbase-client,版本2.2.10.2,批量插入8000+数据出现如下报错什么原因?
【复现路径】问题出现前后相关操作
【附件及日志】
2026-02-27 15:42:15.564 WARN bbm-web-ds-pool - Connection com.oceanbase.jdbc.OceanBaseConnection@216027ad marked as
broken because of SQLSTATE(08000), ErrorCode(-1)
java.sql.SQLNonTransientConnectionException: (conn=2336058) (conn=2336058) Unexpected packet type 3 instead of EOF
at com.oceanbase.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:120)
at com.oceanbase.jdbc.internal.util.exceptions.ExceptionFactory.create(ExceptionFactory.java:200)
at com.oceanbase.jdbc.JDBC4ServerPreparedStatement.prepare(JDBC4ServerPreparedStatement.java:246)
at com.oceanbase.jdbc.JDBC4ServerPreparedStatement.(JDBC4ServerPreparedStatement.java:137)
at com.oceanbase.jdbc.ServerSidePreparedStatement.(ServerSidePreparedStatement.java:78)
at com.oceanbase.jdbc.OceanBaseConnection.internalPrepareStatement(OceanBaseConnection.java:655)
at com.oceanbase.jdbc.OceanBaseConnection.prepareStatement(OceanBaseConnection.java:437)
at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:337)
at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.instantiateStatement(PreparedStatementHand

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

针对您在生产环境中使用 JDBC 驱动 oceanbase-client 版本 2.2.10.2 批量插入超过 8000 条数据时遇到的 SQLNonTransientConnectionException 错误,错误代码为 -1 的情况,这可能是因为数据库连接异常或网络问题导致的。为了更准确地定位问题并提供有效的解决方案,建议您首先使用 obdiag 工具进行日志采集,以帮助我们进一步分析问题的原因。

日志采集场景: 断链接场景
日志采集命令: obdiag gather scene run --scene=observer.disconnection

请您执行上述命令,并将生成的日志文件压缩包提供给我们。这些日志文件将帮助我们了解在批量插入数据过程中发生了什么问题,从而找出根本原因。

此外,为了更好地帮助您解决问题,请您提供以下信息:

  1. 您的 OceanBase 数据库版本是什么?
  2. 执行批量插入操作的 SQL 语句是什么样的?能否提供一个具体的例子?
  3. 发生错误时是否有任何异常现象,例如服务器负载过高、网络不稳定等?
  4. 您是否已经尝试过重试机制或其他解决方案?如果有,具体是如何操作的?
  5. 当前使用的 JDBC 配置参数有哪些?特别是连接池配置、超时时间等设置。

附上敏捷诊断工具 obdiag 使用帮助链接

1、image
2、使用orm框架批量插入,也就是insert into values(…)
3、服务器负载无变化
4、重试也不能成功
5:
spring.datasource.driverClassName =com.oceanbase.jdbc.Driver
spring.datasource.url=jdbc:oceanbase://xxx/xxxx?useTimezone=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=false&useServerPrepStmts=true&cachePrepStmts=true&allowMultiQueries=true
spring.datasource.username=xxx
spring.datasource.password=xxx

spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=180000
spring.datasource.hikari.validation-timeout=3000
spring.datasource.hikari.login-timeout=10
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.connection-test-query=SELECT 1
spring.datasource.hikari.pool-name=web-ds-pool

@AntTech_KLRJBG 试试升级oceanbase-client版本到2.4.x呢。或者使用mysql 8.x版本驱动

升级oceanbase-client版本到2.4.5仍无法解决,目前来看,只有将大批量数据切分为1000条左右,循环多吃插入才能成功,是否还有其他方案

能把具体实现的逻辑发一下么 小批量的数据没有问题么?