4

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

[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 通用 JDBC 驱动程序 v9.7 FP5。我也试过v9.5。

一件事是 DB2 使用 Putty 建立隧道。服务器运行带有 IBM DB2 v7.1 的 linux。我正在使用 Win7x64。

我在网上浏览了许多涵盖此错误的论坛主题,但没有一个对我真正有用。(即iReport 到 DB2 连接 ERRORCODE=-4499, SQLSTATE=08001

首先,我认为这可能与未正确隧道化的端口有关。但是我从 Putty 会话 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 成功打开隧道以纠正端口。

4

2 回答 2

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 服务器”。您可以通过查找名为db2jd.通常这个进程将显示为,例如,db2jd 6789其中 6789 是小程序服务器正在侦听的端口号。如果您没有看到这个进程,您可以通过执行db2jstrt命令来启动它(作为 DB2 实例所有者)。

于 2012-06-06T12:47:53.350 回答
1

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

于 2016-02-24T01:02:25.757 回答