Linux服务器使用kettle抽取Oracle数据库数据, IO Error: Connection reset

Linux服务器使用kettle抽取Oracle数据库数据,偶尔会发生异常 IO Error: Connection reset

详细异常信息:

2019/04/25 11:51:30 - vms_factorystock - ERROR (version 7.1.0.0-12, build 1 from 2017-05-16 17.18.02 by buildguy) : org.pentaho.di.core.exception.KettleDatabaseException: 
2019/04/25 11:51:30 - vms_factorystock - Error occurred while trying to connect to the database
2019/04/25 11:51:30 - vms_factorystock - 
2019/04/25 11:51:30 - vms_factorystock - Error connecting to database: (using class oracle.jdbc.driver.OracleDriver)
2019/04/25 11:51:30 - vms_factorystock - IO Error: Connection reset

开始以为是数据库服务的问题,后来才知道是Linux服务器连接Oracle数据库的问题。

oracle JDBC在建立连接时需要一些随机数据用以加密session token之类的东西,而这个随机数据源默认用的是/dev/random。

由于执行程序的主机没有图形界面只是通过远程ssh进行连接,那么熵值来源就少了两个,如果机器比较空闲则后面两个来源也少了,结果就是等半天来不了一个随机数,可以通过一下命令体验一下,用/dev/random憋出个随机数是多难

dd if=/dev/random of=rnd_file bs=1 count=64

Linux服务器使用kettle抽取Oracle数据库数据, IO Error: Connection reset_第1张图片

Linux中还有个随机数发生器,/dev/urandom,如其名字所述,不那么随机的随机发生器,就是伪随机的,当然会快很多

解决方案:

直接修改$JAVA_HOME/jre/lib/security路径下的java.security文件。
把securerandom.source=file:/dev/random修改成securerandom.source=file:/dev/./urandom

修改完,再命令获取一下随机数,是不是速度飞起来了!
Linux服务器使用kettle抽取Oracle数据库数据, IO Error: Connection reset_第2张图片

你可能感兴趣的:(大数据)