Соединитесь с IBM DB2 с помощью SQuirreL "Reply.fill(). Сообщение: недостаточно данных. ERRORCODE=-4499, SQLSTATE=08001"

Я уже 2 дня пытался подключиться к внешней базе данных DB2 с помощью SQuirreL. Я всегда получаю ошибку:

[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

Я использую универсальный драйвер JDBC IBM DB2 v9.7 FP5. Я также попробовал v9.5.

Одна вещь заключается в том, что DB2 туннелируется с Putty. Сервер работает под управлением Linux с IBM DB2 v7.1. Я использую Win7x64.

В Интернете я перебрал много тем на форумах, в которых описана эта ошибка, но ни одна из них на самом деле не сработала для меня. (т. е. iReport к соединению DB2 ERRORCODE = -4499, SQLSTATE = 08001)

Сначала я подумал, что, возможно, это связано с портом, который не является правильно туннелированным. Но я удалил порт из conf сеанса Putty и произошла другая ошибка.

Трассировка стека, а также для задачи:

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 ответа

Решение

Вам нужно найти и использовать клиентский код 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, вы можете попытаться найти / использовать драйвер JDBC типа 3 (COM.ibm.db2.jdbc.net.DB2Driver). Этот драйвер является клиентским (он имеет 3-уровневую архитектуру, поскольку для его работы на сервере базы данных требуется так называемый "сервер апплетов JDBC". Чтобы узнать, работает ли он на вашем компьютере с Linux, нужно поискать процесс, называемый db2jd, Обычно этот процесс будет отображаться как, например, db2jd 6789где 6789 - номер порта, который прослушивает сервер апплета. Если вы не видите этот процесс, вы можете запустить его (как владелец экземпляра DB2), выполнив db2jstrt команда.

Другая возможность: вам может потребоваться перезагрузить компьютер. В моем случае это сработало для меня. Я получил эту ошибку после установки специальной сборки DB2 10.5.

Другие вопросы по тегам