Kettle表输出报关闭的连接问题的解决方法


最近在使用Kettle的时候表输出有时候会报一个错误 关闭的连接在网上查了半天都没有找到解决办法 
现在记录一下解决过程以备后用。

1.软件环境

-Oracle 11g R2  RAC
-Kettle 6.0.1.0
-JDK 1.68 
-Oracle Driver OJDBC14.jar
2.报错如下
2016/06/23 16:53:30 - 表输出 2.0 - ERROR (version 6.0.1.0-386, build 1 from 2015-12-03 11.37.25 by buildguy) : Because of an error, this step can't continue:
2016/06/23 16:53:30 - 表输出 2.0 - ERROR (version 6.0.1.0-386, build 1 from 2015-12-03 11.37.25 by buildguy) : org.pentaho.di.core.exception.KettleDatabaseException: 
2016/06/23 16:53:30 - 表输出 2.0 - Error performing rollback on connection
2016/06/23 16:53:30 - 表输出 2.0 - 无法从套接字读取更多的数据
2016/06/23 16:53:30 - 表输出 2.0 - 
2016/06/23 16:53:30 - 表输出 2.0 - at org.pentaho.di.core.database.Database.rollback(Database.java:847)
2016/06/23 16:53:30 - 表输出 2.0 - at org.pentaho.di.core.database.Database.rollback(Database.java:825)
2016/06/23 16:53:30 - 表输出 2.0 - at org.pentaho.di.trans.steps.tableoutput.TableOutput.writeToTable(TableOutput.java:332)
2016/06/23 16:53:30 - 表输出 2.0 - at org.pentaho.di.trans.steps.tableoutput.TableOutput.processRow(TableOutput.java:118)
2016/06/23 16:53:30 - 表输出 2.0 - at org.pentaho.di.trans.step.RunThread.run(RunThread.java:62)
2016/06/23 16:53:30 - 表输出 2.0 - at java.lang.Thread.run(Unknown Source)
2016/06/23 16:53:30 - 表输出 2.0 - Caused by: java.sql.SQLException: 无法从套接字读取更多的数据
2016/06/23 16:53:30 - 表输出 2.0 - at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
2016/06/23 16:53:30 - 表输出 2.0 - at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
2016/06/23 16:53:30 - 表输出 2.0 - at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
2016/06/23 16:53:30 - 表输出 2.0 - at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1118)
2016/06/23 16:53:30 - 表输出 2.0 - at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1070)
2016/06/23 16:53:30 - 表输出 2.0 - at oracle.jdbc.driver.T4C7Ocommoncall.receive(T4C7Ocommoncall.java:106)
2016/06/23 16:53:30 - 表输出 2.0 - at oracle.jdbc.driver.T4CConnection.doRollback(T4CConnection.java:567)
2016/06/23 16:53:30 - 表输出 2.0 - at oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.java:1145)
2016/06/23 16:53:30 - 表输出 2.0 - at org.pentaho.di.core.database.Database.rollback(Database.java:838)
2016/06/23 16:53:30 - 表输出 2.0 - ... 5 more
2016/06/23 16:53:30 - 表输入 2.0 - Finished reading query, closing connection.
2016/06/23 16:53:30 - 表输入 2.0 - 完成处理 (I=193511, O=0, R=0, W=193509, U=0, E=0
2016/06/23 16:53:30 - 表输出 2.0 - ERROR (version 6.0.1.0-386, build 1 from 2015-12-03 11.37.25 by buildguy) : Unexpected error committing the database connection.
2016/06/23 16:53:30 - 表输出 2.0 - ERROR (version 6.0.1.0-386, build 1 from 2015-12-03 11.37.25 by buildguy) : org.pentaho.di.core.exception.KettleDatabaseException: 
2016/06/23 16:53:30 - 表输出 2.0 - Error comitting connection
2016/06/23 16:53:30 - 表输出 2.0 - Io 异常: Software caused connection abort: socket write error
2016/06/23 16:53:30 - 表输出 2.0 - 
2016/06/23 16:53:30 - 表输出 2.0 - at org.pentaho.di.core.database.Database.commit(Database.java:766)
2016/06/23 16:53:30 - 表输出 2.0 - at org.pentaho.di.core.database.Database.commit(Database.java:738)
2016/06/23 16:53:30 - 表输出 2.0 - at org.pentaho.di.core.database.Database.emptyAndCommit(Database.java:1349)
2016/06/23 16:53:30 - 表输出 2.0 - at org.pentaho.di.trans.steps.tableoutput.TableOutput.dispose(TableOutput.java:575)
2016/06/23 16:53:30 - 表输出 2.0 - at org.pentaho.di.trans.step.RunThread.run(RunThread.java:96)
2016/06/23 16:53:30 - 表输出 2.0 - at java.lang.Thread.run(Unknown Source)
2016/06/23 16:53:30 - 表输出 2.0 - Caused by: java.sql.SQLException: Io 异常: Software caused connection abort: socket write error
2016/06/23 16:53:30 - 表输出 2.0 - at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
2016/06/23 16:53:30 - 表输出 2.0 - at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
2016/06/23 16:53:30 - 表输出 2.0 - at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255)
2016/06/23 16:53:30 - 表输出 2.0 - at oracle.jdbc.driver.T4CConnection.doCommit(T4CConnection.java:533)
2016/06/23 16:53:30 - 表输出 2.0 - at oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:1128)
2016/06/23 16:53:30 - 表输出 2.0 - at org.pentaho.di.core.database.Database.commit(Database.java:757)
2016/06/23 16:53:30 - 表输出 2.0 - ... 5 more
2016/06/23 16:53:30 - 表输出 2.0 - ERROR (version 6.0.1.0-386, build 1 from 2015-12-03 11.37.25 by buildguy) : org.pentaho.di.core.exception.KettleDatabaseException: 
2016/06/23 16:53:30 - 表输出 2.0 - Error comitting connection
2016/06/23 16:53:30 - 表输出 2.0 - Io 异常: Software caused connection abort: socket write error
2016/06/23 16:53:30 - 表输出 2.0 - 
2016/06/23 16:53:30 - 表输出 2.0 - at org.pentaho.di.core.database.Database.commit(Database.java:766)
2016/06/23 16:53:30 - 表输出 2.0 - at org.pentaho.di.core.database.Database.commit(Database.java:738)
2016/06/23 16:53:30 - 表输出 2.0 - at org.pentaho.di.core.database.Database.emptyAndCommit(Database.java:1349)
2016/06/23 16:53:30 - 表输出 2.0 - at org.pentaho.di.trans.steps.tableoutput.TableOutput.dispose(TableOutput.java:575)
2016/06/23 16:53:30 - 表输出 2.0 - at org.pentaho.di.trans.step.RunThread.run(RunThread.java:96)
2016/06/23 16:53:30 - 表输出 2.0 - at java.lang.Thread.run(Unknown Source)
2016/06/23 16:53:30 - 表输出 2.0 - Caused by: java.sql.SQLException: Io 异常: Software caused connection abort: socket write error
2016/06/23 16:53:30 - 表输出 2.0 - at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
2016/06/23 16:53:30 - 表输出 2.0 - at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
2016/06/23 16:53:30 - 表输出 2.0 - at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255)
2016/06/23 16:53:30 - 表输出 2.0 - at oracle.jdbc.driver.T4CConnection.doCommit(T4CConnection.java:533)
2016/06/23 16:53:30 - 表输出 2.0 - at oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:1128)
2016/06/23 16:53:30 - 表输出 2.0 - at org.pentaho.di.core.database.Database.commit(Database.java:757)
2016/06/23 16:53:30 - 表输出 2.0 - ... 5 more
2016/06/23 16:53:30 - 表输出 2.0 - ERROR (version 6.0.1.0-386, build 1 from 2015-12-03 11.37.25 by buildguy) : Unexpected error rolling back the database connection.
2016/06/23 16:53:30 - 表输出 2.0 - ERROR (version 6.0.1.0-386, build 1 from 2015-12-03 11.37.25 by buildguy) : org.pentaho.di.core.exception.KettleDatabaseException: 
2016/06/23 16:53:30 - 表输出 2.0 - Error performing rollback on connection
2016/06/23 16:53:30 - 表输出 2.0 - 关闭的连接
2016/06/23 16:53:30 - 表输出 2.0 - 
2016/06/23 16:53:30 - 表输出 2.0 - at org.pentaho.di.core.database.Database.rollback(Database.java:847)
2016/06/23 16:53:30 - 表输出 2.0 - at org.pentaho.di.core.database.Database.rollback(Database.java:825)
2016/06/23 16:53:30 - 表输出 2.0 - at org.pentaho.di.trans.steps.tableoutput.TableOutput.dispose(TableOutput.java:610)
2016/06/23 16:53:30 - 表输出 2.0 - at org.pentaho.di.trans.step.RunThread.run(RunThread.java:96)
2016/06/23 16:53:30 - 表输出 2.0 - at java.lang.Thread.run(Unknown Source)
2016/06/23 16:53:30 - 表输出 2.0 - Caused by: java.sql.SQLException: 关闭的连接
2016/06/23 16:53:30 - 表输出 2.0 - at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
2016/06/23 16:53:30 - 表输出 2.0 - at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
2016/06/23 16:53:30 - 表输出 2.0 - at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
2016/06/23 16:53:30 - 表输出 2.0 - at oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.java:1142)
2016/06/23 16:53:30 - 表输出 2.0 - at org.pentaho.di.core.database.Database.rollback(Database.java:838)
2016/06/23 16:53:30 - 表输出 2.0 - ... 4 more
2016/06/23 16:53:30 - 表输出 2.0 - 完成处理 (I=0, O=192000, R=193000, W=192000, U=0, E=1

3.解决方案

通过以上的分析可以推断程序应该不会有问题。那只有这样几种可能了

-1、网络不稳定 
-2、Oracle 连接资源耗尽 
-3、Oracle驱动有问题 
通过排除第一种和第二种问题,最后看了一下使用的Oracle驱动版本为OJDBC14.jar确实有点老了。在Oracle的Home目录下面找到JDBC目录然后将OJDBC6.jar更换原来的驱动。 


测试,问题被解决。


请使用浏览器的分享功能分享到微信等