#db2 #odbc #unixodbc
#db2 #odbc #unixodbc
Вопрос:
odbc.ini:
[DEFAULT]
Driver = DB2
[abc]
Driver = DB2
[dsn_test1]
DESCRIPTION = Connection to DB2
Driver = db2
odbcinst.ini:
[DB2]
Description = DB2 Driver
Driver = /home/user/sqllib/lib/libdb2.so
fileusage=1
dontdlclose=1
[ODBC]
Trace=1
TraceFile=/home/user/sqllib/trace.out
db2cli.ini
[abc]
hostname="hostname"
pwd="passwd"
port="port"
PROTOCOL=TCPIP
database="dbname"
uid="uid"
$ ./isql abc
---------------------------------------
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
---------------------------------------
при подключении из драйвера db2 появляется следующая ошибка:
Connection attempt for data source name "abc":
===============================================================================
ODBC Driver Manager Path: /home/user/sqllib/odbclib/lib/libodbc.so
[FAILED]: [unixODBC][Driver Manager]Driver's SQLAllocHandle on SQL_HANDLE_HENV
failed
Ниже приведен фрагмент трассировки odbc:
[ODBC][23419][1403783774.660159][SQLConnect.c][1380]Error: IM004
[ODBC][23419][1403783774.660223][SQLError.c][434]
Entry:
Connection = 0x81aaac8
SQLState = 0xffff9593
Native = 0xffff9684
Message Text = 0xffff8d93
Buffer Length = 1024
Text Len Ptr = 0xffff95bc
[ODBC][23419][1403783774.660260][SQLError.c][471]
Exit:[SQL_SUCCESS]
SQLState = IM004
Native = 0xffff9684 -> 0
Message Text = [[unixODBC][Driver Manager]Driver's SQLAllocHandle on SQL_HANDLE_HENV failed]
Много искал первопричину, dint очень помог, пожалуйста, предоставьте какой-нибудь указатель для решения этой проблемы.
это 32-разрядная Linux-машина, также имеющая 32-разрядный драйвер db.
Комментарии:
1. Я включил трассировку в конфигурации odbcinst, но где отображаются трассировки?
Ответ №1:
Согласно этой странице поддержки IBM, SQLState IM004 в SQLAllocHandle относится к новой функции безопасности.
Причина
Новые функции безопасности, представленные в DB2® Universal Database™ (DB2 UDB) версии 8.2, запрещают пользователям использовать базу данных, если они не принадлежат к группам Windows® DB2ADMNS или DB2USERS.
Ответ
Добавьте идентификатор пользователя (тот, который используется для выполнения приложения) в группу DB2ADMNS или DB2USERS. Пожалуйста, обратитесь к ссылке в разделе «Связанная информация» (ниже) для получения инструкций о том, как это сделать.
В качестве альтернативы, существует ряд потоков (например, огромные проблемы с подключением к базе данных DB2), которые предлагают установить переменную DB2INSTANCE
среды в соответствии с настройкой экземпляра в вашем odbc.ini
файле для соответствующего DSN, например
export DB2INSTANCE=db2inst1
isql -v FS01DB2
Комментарии:
1. Привет, спасибо за ответ, забыл упомянуть его разрядную машину linux32 и клиент без экземпляра. DB2INSTANCE в этом случае не будет эффективным
2. вы пытались посмотреть на их сайте инструкции по сборке из исходного кода (а затем иметь возможность изменять). Прошло некоторое время, но я делал это в прошлом, когда работал над драйвером ODBC.
3. экспорт CC = gcc экспорт CFLAGS=»-maix64 -q64 -DBUILD_REAL_64_BIT_MODE» экспорт OBJECT_MODE= 64, отладка после этого просмотра в Linux
4. Отредактируйте свой вопрос, чтобы ответить (1) что такое дистрибутив Linux и подробная информация о версии (2) каково имя и тип установленного Db2-драйвера, и особенно его версия, fixpack (3) Подробно, что вы подразумеваете под «подключением из драйвера Db2», покажите точную командную строку (если используете)или исходный код. (4) Подробно укажите задействованные учетные записи, т.Е. На какой учетной записи установлен драйвер Db2, и какая учетная запись пытается подключиться с помощью какого метода.