前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DataX 报错:java.sql.SQLRecoverableException: IO 错误: Connection reset

DataX 报错:java.sql.SQLRecoverableException: IO 错误: Connection reset

作者头像
王图思睿
发布2021-06-16 16:07:54
2.7K0
发布2021-06-16 16:07:54
举报
文章被收录于专栏:膨胀的面包膨胀的面包

在使用 DataX 抽取 Oracle 中的数据时,遇到了如下报错:

代码语言:javascript
复制
2021-04-19 14:04:47.207 [0-0-0-reader] ERROR ReaderRunner - Reader runner Received Exceptions:
com.alibaba.datax.common.exception.DataXException: Code:[DBUtilErrorCode-07], Description:[读取数据库数据失败. 请检查您的配置的 column/table/where/querySql或者向 DBA 寻求帮助.].  - 执行的SQL为: ****** 具体错误信息为:java.sql.SQLRecoverableException: IO 错误: Connection reset
        at com.alibaba.datax.common.exception.DataXException.asDataXException(DataXException.java:26) ~[datax-common-0.0.1-SNAPSHOT.jar:na]
        at com.alibaba.datax.plugin.rdbms.util.RdbmsException.asQueryException(RdbmsException.java:93) ~[plugin-rdbms-util-0.0.1-SNAPSHOT.jar:na]
        at com.alibaba.datax.plugin.rdbms.reader.CommonRdbmsReader$Task.startRead(CommonRdbmsReader.java:220) ~[plugin-rdbms-util-0.0.1-SNAPSHOT.jar:na]
        at com.alibaba.datax.plugin.reader.oraclereader.OracleReader$Task.startRead(OracleReader.java:110) ~[oraclereader-0.0.1-SNAPSHOT.jar:na]
        at com.alibaba.datax.core.taskgroup.runner.ReaderRunner.run(ReaderRunner.java:57) ~[datax-core-0.0.1-SNAPSHOT.jar:na]
        at java.lang.Thread.run(Thread.java:748) [na:1.8.0_191]

java.sql.SQLException: Io 异常: Connection reset 大意看起来应该是连接问题,网上查了一下,说是当数据库连接池中的连接被创建而长时间不使用的情况下,该连接会自动回收并失效,但客户端并不知道,在进行数据库操作时仍然使用的是无效的数据库连接,这样,就导致客户端程序报“java.sql.SQLException: Io 异常: Connection reset” 或 “java.sql.SQLException 关闭的连接” 异常。

网上跟这个问题相关的解决思路是 Connection Reset 的原因有可能有以下几种原因:

  1. 配置的数据连接池的连接数不够用;
  2. 数据库的连接池中的连接,长时间不用,数据库主动断开连接,而客户端不知道,在用的时候仍然拿到的是无效的连接;

分别对应以上的两种猜想的原因,进行处理:

  1. 配置连接池的最大、最小、空闲连接数等;
  2. 配置对连接池里的连接进行有效性检查,如,配置有效性连接检查 sql 语句,配置是否进行有效性检查等;

但是这两种方法都不太适用我目前的情况,因为我无法修改 DataX 底层的源代码,所以无法验证上边两种方法,但是我找到了另一种解决方法。

首先解释下另一种出现这个问题的原因:

连接 ORACLE 服务器,客户端要生成随机密钥用于客户端认证,linux 下 JDK 默认使用 /dev/random,random 采用阻塞方式生成随机数,生成的速度很慢,ORACLE 服务器会主动 reset,并在 alert.log 中报错:

代码语言:javascript
复制
TNS-12535: TNS:operation timed out
    ns secondary err code: 12606
    nt main err code: 0
    nt secondary err code: 0
    nt OS err code: 0
  Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.6.21)(PORT=33460))
WARNING: inbound connection timed out (ORA-3136)

解决方案:

1、找到配置的 $JAVA_HOME,如果自己知道的就不需要这一步。

代码语言:javascript
复制
cat /etc/profile

在文件中找到 export JAVA_HOME= 这一行,后边的路径记下来。

2、编辑 JAVA_HOME/jre/lib/security/java.security,JAVA_HOME 替换为上一步查出的路径

代码语言:javascript
复制
vi /usr/local/jdk1.8.0_191/jre/lib/security/java.security

将文件中 securerandom.source=file:/dev/random 改为 file:/dev/urandom (urandom采用非阴塞式生成随机数,性能很好,不会产生超时)

3、解决。

via: ojdbc在linux环境下 java.sql.SQLRecoverableException: IO Error: Connection reset 的问题 - leon.sang - 博客园 https://www.cnblogs.com/bmwsl/p/11412362.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在使用 DataX 抽取 Oracle 中的数据时,遇到了如下报错:
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档