не удалось подключиться к базе данных DB2: [unixODBC] [Диспетчер драйверов] включен SQLAllocHandle драйвера в SQL_HANDLE_HENV

#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, и какая учетная запись пытается подключиться с помощью какого метода.