4

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も試しました。

1 つのことは、DB2 が Putty でトンネリングされていることです。サーバーは IBM DB2 v7.1 で Linux を実行します。Win7x64を使用しています。

このエラーをカバーする Web 上の多くのフォーラム トピックに出くわしましたが、実際にはどれもうまくいきませんでした。(つまり、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 アプレット サーバー」をデータベース サーバーで実行する必要があるためです。Linux ボックスで実行されているかどうかは、db2jd.通常、このプロセスは、たとえば のように表示されますdb2jd 6789。ここで、6789 は、アプレット サーバーがリッスンしているポート番号です。このプロセスが表示されない場合は、db2jstrtコマンドを実行して (DB2 インスタンスの所有者として) 開始できます。

于 2012-06-06T12:47:53.350 に答える