Как мне подключиться к DB2 через пакет Python ibm_dbPython

Программы на Python
Ответить
Anonymous
 Как мне подключиться к DB2 через пакет Python ibm_db

Сообщение Anonymous »

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

Моя цель — установить библиотеку Python ibm_db на моем ноутбуке с Windows 7 и подключиться к нашему экземпляру DB2.

Я не могу заставить метод ibm_db.connect() распознавать системный DSN или пользовательский DSN, которые заведомо исправны (я использую их для подключения к DB2 через Sql Server Management Studio (SSMS))

Я получаю следующие ошибки от различных комбинации соединений (показаны ниже), но я не нашел ни одной ссылки, в которой описывается, что означают ошибки и что я могу сделать, чтобы решить проблему. Я просмотрел и прочитал десятки веб-сайтов и документов IBM, но ни один из них не упоминает эту информацию.
--> У меня такое чувство, что я упускаю какой-то простой шаг, но я не знаю, чего я не знаю на данный момент :)

Заметки по настройке системы ::
  • Ноутбук с Windows 7
  • Версия DB2 7.3
  • Python 2.7.13 |Anaconda 4.4.0 (64-разрядная версия)| (по умолчанию, 11 мая 2017, 13:17:26) [MSC v.1500 64 бит (AMD64)] на win32
  • Установлены версии библиотеки Python, которые кажутся подходящими
  • ibm-db (2.0.8)
  • ibm-db-sa (0.3.3)
  • pyodbc (4.0.16)
  • pyOpenSSL (17.0.0)
  • У меня установлен и работает iSeries Navigator, в состав которого входит драйвер ODBC для iSeries. Он прекрасно работает для подключения к локальным экземплярам DB2.
  • У меня установлен интерфейс командной строки DB2, который добавил ДРАЙВЕР с именем IBM DB2 ODBC DRIVER - C_clidriver в реестр и в список драйверов 64-битного ODBC Manager.
  • Вот файловый DSN, который я создал из драйвера ODBC iSeries, который работает, но посмотрите совершенно отличается от DSN, который я использую для драйвера IBM CLI:

    [ODBC]
    DRIVER=iSeries Access ODBC Driver
    DATABASE=DBASE
    PKG=QGPL/DEFAULT(IBM),2,0,1,0,512
    LANGUAGEID=ENU
    DFTPKGLIB=QGPL
    DBQ=QGPL
    SYSTEM=DBSYS
Первая попытка :: базовое соединение с указанным полным DSN:

>>> import ibm_db
>>> dsn = "DATABASE=dbname;HOSTNAME=hostname.domain;PORT=466;PROTOCOL=TCPIP"
>>> conn = ibm_db.connect(dsn,'mytextuid','password')
Traceback (most recent call last):
File "", line 1, in
Exception: [IBM][CLI Driver] SQL10007N Message "0" could not be retrieved.
**Reason code: "6". SQLCODE=-1366**


Далее :: Добавьте драйвер с ТОЧНЫМ именем драйвера, как указано в реестре

>>> dsn = "DRIVER={IBM DB2 ODBC DRIVER - C_clidriver};HOSTNAME=hostname.domain;PORT=446;PROTOCOL=TCPIP;UID=mytextuid;PWD=password;"
>>> conn = ibm_db.connect(dsn,'CROWLEY','July2017')
Traceback (most recent call last):
File "", line 1, in
Exception: [IBM][CLI Driver]
**SQLSTATE=01S00 SQLCODE=-99999**


Далее:: попробуйте использовать DSN другого формата, сочетая БАЗУ ДАННЫХ, ИМЯ ХОСТА И ПОРТ

>>> dsn = "DATABASE=Dbname:hostname.domain:466;PROTOCOL=TCPIP"
>>> conn = ibm_db.connect(dsn,'mytextuid','password')
Traceback (most recent call last):
File "", line 1, in
Exception: [IBM][CLI Driver] SQL10007N Message "0" could not be retrieved.
**Reason code: "6". SQLCODE=-1024**


Далее: попробуйте системный DSN, который является заведомо хорошим, поскольку я использую его в SSMS

>>> conn = ibm_db.connect('DSN=SYSTEM_DB2_DSN','mytextuid','password')
Traceback (most recent call last):
File "", line 1, in
Exception: [IBM][CLI Driver] SQL10007N Message "0" could not be retrieved.
**Reason code: "6". SQLCODE=-1013**


Далее: попробуйте использовать пользовательский DSN с той же конфигурацией, что и выше

>>> conn = ibm_db.connect("DSN=USER_DB2_DSN","mytextuid","password")
Traceback (most recent call last):
File "", line 1, in
Exception: [IBM][CLI Driver]
**SQLSTATE=HY009 SQLCODE=-99999**


Далее :: Включена трассировка в системном DSN ODBC (результат: администратор ODBC зависает при соединении)

C:\clidriver\db2trace.log>cat p8516t4948.cli

[ Process: 8516, Thread: 4948 ]
[ Date & Time: 02/27/2018 15:28:34.282526 ]
[ Product: QDB2/NT64 DB2 v11.1.2021.1452 ]
[ Level Identifier: 0203010F ]
[ CLI Driver Version: 10.01.0000 ]
[ Informational Tokens: "DB2 v11.1.2021.1452","s1709221349","DYN1709221349W
IN64","Fixpack 2a" ]
[ Install Path: C:\clidriver ]
[ db2cli.ini Location: C:\Users\mytextuid\db2cli.ini ]
[ db2cli.ini Location2: C:\ProgramData\IBM\DB2\C_clidriver\cfg\db2cli.ini ]

[ db2dsdriver.cfg Location: C:\ProgramData\IBM\DB2\C_clidriver\cfg\db2dsdriver.
cfg ]
[ CLI Driver Type: IBM Data Server Driver For ODBC and CLI ]

[0000008516 0000004948] [02/27/2018 15:28:34.283197] SQLAllocEnv(phEnv=&0000000000392b00 )
[0000008516 0000004948] [02/27/2018 15:28:34.284702] ---> Time elapsed - 0 seconds

[0000008516 0000004948] [02/27/2018 15:28:34.299819] SQLAllocEnv( phEnv=0:1 )
[0000008516 0000004948] [02/27/2018 15:28:34.301458] Time elapsed - +7.410000E-004 seconds

[0000008516 0000004948] [02/27/2018 15:28:34.305055] SQLAllocConnect( phDbc=0:1)
[0000008516 0000004948] [02/27/2018 15:28:34.305902] Time elapsed - +3.830000E-004 seconds
sqlccconnr( timeout - +0.000000E+000, protocol - 0x03 )


Далее:: просматриваю c:\ProgramData\IBM\DB2\C_clidriver\db2diag.log

Я проверяю соединение для DSN в ODBC Admin и получаю вот эту запись... Примечание:: "DB", APPID и HOSTNAME запутаны ниже... Я понятия не имею, почему для использования требуется лицензия этот драйвер, если это вообще проблема

2018-02-27-16.29.43.560000-480 E27622F847 LEVEL: Error
PID : 13452 TID : 4948 PROC : odbcad32.exe
INSTANCE: NODE : 000 DB : DBNAME
APPID : my.ipa.ddr.ess.65253.180228002943
HOSTNAME: ${COMPUTERNAME}
EDUID : 4948
FUNCTION: DB2 UDB, Connection Manager, sqleuPerformServerActivationCheck, probe:110
MESSAGE : ADM12008C The product "IBM Data Server Driver For ODBC and CLI" does
not have a valid license key installed and the evaluation period has
expired. Functions specific to this product are not enabled. If you
have licensed this product, ensure the license key is properly
installed. You can install the license using the db2licm command. The
license file can be obtained from your licensed product CD.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»