使用SQuirreL连接到IBM DB2“Reply.fill()。消息:数据不足.ERRORCODE = -4499,SQLSTATE = 08001”

时间:2012-06-04 08:07:22

标签: jdbc db2 squirrel-sql

我现在尝试用SQuirreL连接到外部DB2数据库2天。我总是得到错误:

[jcc][t4][2030][11211][3.58.82] A communication error occurred during operations
on the connection's underlying socket, socket input stream, or socket output
stream. Error location: Reply.fill().  Message: Insufficient data.
ERRORCODE=-4499, SQLSTATE=08001

我正在使用IBM DB2 Universal JDBC驱动程序v9.7 FP5。我也尝试过v9.5。

有一点是DB2使用Putty进行隧道传输。 Server使用IBM DB2 v7.1运行linux。我使用的是Win7x64。

我在网上讨论了很多涉及此错误的论坛主题,但其中没有一个实际上对我有用。 (即iReport to DB2 connection ERRORCODE=-4499, SQLSTATE=08001

首先,我认为这可能与端口没有相关的隧道相关。但是我从Putty session conf中删除了端口并发生了不同的错误。

堆栈跟踪以及问题:

com.ibm.db2.jcc.am.io: [jcc][t4][2030][11211][3.58.82] A communication error
occurred during operations on the connection's underlying socket, socket input
stream, or socket output stream.  Error location: Reply.fill().  Message:
Insufficient data. ERRORCODE=-4499, SQLSTATE=08001
    at com.ibm.db2.jcc.am.ed.a(ed.java:319)
    at com.ibm.db2.jcc.t4.a.a(a.java:416)
    at com.ibm.db2.jcc.t4.a.a(a.java:411)
    at com.ibm.db2.jcc.t4.cb.b(cb.java:227)
    at com.ibm.db2.jcc.t4.cb.c(cb.java:249)
    at com.ibm.db2.jcc.t4.cb.c(cb.java:360)
    at com.ibm.db2.jcc.t4.cb.v(cb.java:1145)
    at com.ibm.db2.jcc.t4.db.a(db.java:42)
    at com.ibm.db2.jcc.t4.b.m(b.java:1238)
    at com.ibm.db2.jcc.t4.b.b(b.java:1112)
    at com.ibm.db2.jcc.t4.b.c(b.java:700)
    at com.ibm.db2.jcc.t4.b.b(b.java:686)
    at com.ibm.db2.jcc.t4.b.a(b.java:367)
    at com.ibm.db2.jcc.t4.b.<init>(b.java:307)
    at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:214)
    at com.ibm.db2.jcc.DB2Driver.connect(DB2Driver.java:456)

我最好的猜测是,并且仍然是JDBC通用驱动程序与DB2 v7.1不向后兼容。

它适用于其他具有32位XP的开发机器(同事)。我试图将它用于不同的32位XP,但结果却相同。

至少有人能描述这种异常的根源吗?

修改

http://www.ibm.com/developerworks/forums/thread.jspa?messageID=14779629 这不能是防火墙或隧道错误。成功打开隧道以使用telnet修正端口。

2 个答案:

答案 0 :(得分:3)

您需要找到并使用DB2 7.2或DB2 7.1客户端代码(也称为DB2 Client Application Enabler)。在DB2 8.1之前,IBM使用一种名为DB2RA的不同的,依赖于平台的协议来实现客户端和服务器之间的通信。 DB2 8.1切换到标准DRDA协议。在特定配置中,DB2 8.x客户机可以与DB2 7.x服务器通信。

或者,如果您使用的是Java应用程序,则可以尝试查找/使用Type 3 JDBC驱动程序(COM.ibm.db2.jdbc.net.DB2Driver)。这个驱动程序是无客户端的(它有一个3层架构,因为它需要在数据库服务器上运行所谓的“JDBC Applet Server”。你可以通过查找名为{的进程来查看它是否在你的linux机器上运行{1}}。通常,此过程将显示为db2jd,其中6789是applet服务器正在侦听的端口号。如果您没有看到此过程,则可以启动它(作为DB2实例所有者)通过执行db2jd 6789命令。

答案 1 :(得分:0)

另一种可能性:您可能需要重新启动计算机。就我而言,这对我有用。我在安装DB2 10.5的特殊版本后遇到了这个错误。