powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Подключение к DB2 базе из windows
23 сообщений из 23, страница 1 из 1
Подключение к DB2 базе из windows
    #38033372
us2h
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер,

Разобрался как собрать либу PDO IBM ( http://pecl.php.net/package/PDO_IBM) на лиуксе, все отлично завелось вот такой код отрабатывал без проблем

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<?php
     
        $database = 'TEST001';
        $ip = 'ХХХ.ХХХ.ХХХ.ХХХ';
        $user = 'db2inst1';
        $password = 'pass';
        try {
            $db = new PDO("ibm:DATABASE=$database;HOSTNAME=$ip", $user, $password);
            $res = $db->query($queryStr)->fetch(PDO::FETCH_ASSOC);
            print_r($res);
        }
        catch (PDOException $e)
        {
            echo $e->getMessage();
        }

?>



Но при попытке установить подобное на виндовый сервак столкнулся с тем что скомпилировать расширение PECL под винду то еще шаманство. Но следуя рекомендациям на сайте IBM установил это http://www.zend.com/en/products/server-ce/downloads
(В процессе установки оно автоматом доствило IBM DB2 Runtime Client)

Там модули pdo_ibm и ibm_db2 включаются в пару кликов. И все было бы прекрасно но вот код приведенный выше возвращает такую ошибку

SQLSTATE=08001, SQLDriverConnect: -1032 [IBM][CLI Driver] SQL1032N No start database manager command was issued. SQLSTATE=57019

Помогите разобраться, уже и не знаю в какую сторону копать.
...
Рейтинг: 0 / 0
Подключение к DB2 базе из windows
    #38033816
mustaccio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
us2h,

Из сообщения следует, что у вас экземпляр ДБ2 не запущен.
...
Рейтинг: 0 / 0
Подключение к DB2 базе из windows
    #38033889
us2h
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
База на удаленном сервере, и она там запущена. С той же винды я без проблем подключаюсь к ней через Data Studio и из пхп на линуксе. Какой же экземпляр ей нужен
...
Рейтинг: 0 / 0
Подключение к DB2 базе из windows
    #38033923
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня были похожие проблемы ввиду того, что на винде дефолтное имя инстанса DB2, а на линухе db2inst1. Кажется, что здесь не тот случай - для "моей" ошибки требуется неправильно закаталогизировать, а тут вроде бы идёт мимо каталога. Но, по первому попавшемуся линку, чтобы коннектиться, не обращаясь к каталогу или .ini, в connection string надо указывать больше подробностей:

The DSN can be any of the following:

a) Data source setup using db2cli.ini or odbc.ini

b) Catalogued database name i.e. database alias in the DB2 client catalog

c) Complete connection string in the following format: DRIVER={IBM DB2 ODBC DRIVER};DATABASE=database;HOSTNAME=hostname;PORT=port;PROTOCOL=TCPIP;UID=username;PWD=password; where the parameters represent the following values:

чего мы не наблюдаем.
...
Рейтинг: 0 / 0
Подключение к DB2 базе из windows
    #38033960
us2h
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть прогресс, не знаю положительный или отрицательный :)

Поменял конекшн стринг на

Код: php
1.
$db = new PDO("ibm:DATABASE=$database;HOSTNAME=$ip;PROTOCOL=TCPIP;PORT=50000;", $user, $password);



теперь долго думает а потом выдает

SQLSTATE=08001, SQLDriverConnect: -30081 [IBM][CLI Driver] SQL30081N A communication error has been detected. Communication protocol being used: "TCP/IP". Communication API being used: "SOCKETS". Location where the error was detected: "XXX.XXX.XXX.XXX". Communication function detecting the error: "connect". Protocol specific error code(s): "10060", "*", "*". SQLSTATE=08001
...
Рейтинг: 0 / 0
Подключение к DB2 базе из windows
    #38033969
us2h
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Содержимое файла ODBCINST.INI

[ODBC 32 bit Drivers]
IBM DB2 ODBC DRIVER - DB2COPY1 (32 bit)=Installed
IBM DB2 ODBC DRIVER (32 bit)=Installed
[IBM DB2 ODBC DRIVER - DB2COPY1 (32 bit)]
Driver=C:\PROGRA~2\IBM\SQLLIB\BIN\DB2CLI.DLL
Setup=C:\PROGRA~2\IBM\SQLLIB\BIN\DB2ODBC.DLL
32Bit=1
[IBM DB2 ODBC DRIVER (32 bit)]
Driver=C:\Program Files (x86)\IBM\SQLLIB\BIN\DB2CLI.DLL
Setup=C:\Program Files (x86)\IBM\SQLLIB\BIN\DB2ODBC.DLL
32Bit=1
...
Рейтинг: 0 / 0
Подключение к DB2 базе из windows
    #38034006
us2h
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотя вот эта ошибка

SQLSTATE=08001, SQLDriverConnect: -30081 [IBM][CLI Driver] SQL30081N A communication error has been detected. Communication protocol being used: "TCP/IP". Communication API being used: "SOCKETS". Location where the error was detected: "XXX.XXX.XXX.XXX". Communication function detecting the error: "connect". Protocol specific error code(s): "10060", "*", "*". SQLSTATE=08001

возникает скорее всего из-за проблем с фаерволом, сейчас попробовал на другой машине, этой ошибки нет но выдает интернал сервер ерор
...
Рейтинг: 0 / 0
Подключение к DB2 базе из windows
    #38034009
us2h
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть подозрение что оно пытается использовать pdo_ibm а не ibm_db2. Когда выключил pdo_ibm и оставил только ibm_db2 стало писать

could not find driver

на линуксе у меня работало помоему с либой ibm_db2 (судя по версиям)
...
Рейтинг: 0 / 0
Подключение к DB2 базе из windows
    #38034165
us2h,

Более-менее "свежие" бинарные версии драйвера ibm_db2 для Windows есть здесь Technology Explorer for IBM DB2
Работа через PDO - это правильный путь.

internal server error - нужно смотреть в логи апача, какая ошибка или ошибки там пишутся.

Рекомендую проверить выполняется ли подключение к БД с машины на которой установлен PHP из командной строки DB2.
Для этого нужно запустить командную строку DB2 (db2cmd.exe), один раз каталогизировать удаленную БД (две команды) и потом выполнить к ней подключение.
Пример:
Код: plsql
1.
2.
3.
4.
5.
db2 "CATALOG TCPIP NODE TCPW0001 REMOTE <ip-адрес базы> SERVER <порт базы>"
db2 "CATALOG DATABASE <имя базы> AT NODE TCPW0001"
db2 "CONNECT TO <имя базы> USER <имя пользователя>"
db2 "SELECT CURRENT DATE FROM SYSIBM.SYSDUMMY1"
db2 "DISCONNECT ALL"


Если все команды отработают без ошибок, нужно будет искать ошибки уже по логам апача.
...
Рейтинг: 0 / 0
Подключение к DB2 базе из windows
    #38034232
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
us2h,

Попробуй telnet'ом на порт 50000 с PHP'шной машины на DB2'шную зайти. Вопросы с firewall'ом отпадут.
...
Рейтинг: 0 / 0
Подключение к DB2 базе из windows
    #38034478
us2h
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) Проблему с фаерволом я уже отбросил
2) Подключение с машины с пхп есть, я подключаюсь оттуда через Data Studio
3) Апач ничего не пишет в лог, специально сделал виртуал хост что бы был отдельный лог, он пустой создает и все, ничего туда по этому поводу не пишет
...
Рейтинг: 0 / 0
Подключение к DB2 базе из windows
    #38034560
us2h,

PHP работает через платформенные библиотеки клиента DB2.
DataStudio работает через Java JDBC Driver, который работает независимо от клиента DB2 (при использовании Type4 соединения).
В общем случае работа DataStudio доказывает только факт, что база данных доступна с этой машины.

Проверка соединения с командной строки db2 задействует те же библиотеки клиента, что и PHP.
Т.е. нормальное подключение с командной строки доказывает что работает клиент db2.

А дальше нужно проверять совпадение разрядности(32-бит, 64-бит) и способа компиляции (VC6, VC9), (ThreadSafe, NotThreadSafe) библиотек Apache, PHP, драйвера DB2 и клиента DB2.
Разрядность должна четко совпадать. Настройки компиляции PHP и драйвера ibm_db2 должны так же четко совпадать.

Если Apache HTTP Server в логи ничего не пишет, можно попробовать выполнить скрипт php из командной строки.
В командной строке иногда проще увидеть ошибку. ОС может сообщить о нехватке DLL, или отсутствии в этой DLL нужной функции (что говорит о несовпадении версии например). Может VC Runtime нужный отсутствует или не той версии.
...
Рейтинг: 0 / 0
Подключение к DB2 базе из windows
    #38034898
us2h
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Евгений Хабаров,

Спасибо за такой развернутый ответ! Действительно, попробую из консоли запустить/приконектится, авось на что то ругнется.
...
Рейтинг: 0 / 0
Подключение к DB2 базе из windows
    #38036158
us2h
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Евгений Хабаров,

Итак я попробовал, вот что имеем

C:\Documents and Settings\us2h>db2 "CATALOG TCPIP NODE TCPW0001 REMOTE XXX.XXX.XXX.XXX SERVER 50000"
DB20000I The CATALOG TCPIP NODE command completed successfully.
DB21056W Directory changes may not be effective until the directory cache is
refreshed.

C:\Documents and Settings\us2h>db2 "CATALOG DATABASE TEST001 AT NODE TCPW0001"
DB20000I The CATALOG DATABASE command completed successfully.
DB21056W Directory changes may not be effective until the directory cache is
refreshed.

C:\Documents and Settings\us2h>db2 "CONNECT TO TEST001 USER db2inst1
Enter current password for db2inst1:

Database Connection Information

Database server = DB2/LINUXX8664 1.0
SQL authorization ID = DB2INST1
Local database alias = TEST001


C:\Documents and Settings\us2h>db2 "SELECT CURRENT DATE FROM SYSIBM.SYSDUMMY1"
SQL0805N Package "NULLID.SQLC2G15 0X41414141414C4959" was not found.
SQLSTATE=51002
...
Рейтинг: 0 / 0
Подключение к DB2 базе из windows
    #38036173
us2h
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Странное дело, зашел в Default DB2 database client interface wizard проклацал, что то выбрал, не особо понял что. И предыдущий селект отработал. Но из браузера все равно выдает интернал сервер еррор
...
Рейтинг: 0 / 0
Подключение к DB2 базе из windows
    #38036178
us2h
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если запустить пхп из консоли то

C:\Program Files\Zend\Apache2\htdocs>php db2.php
invalid data source name
...
Рейтинг: 0 / 0
Подключение к DB2 базе из windows
    #38036671
us2h
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Победил ошибку

invalid data source name

немного поменяв строку конекта, поствил хостнейм на первое место

В целом такой код

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
try {
            
            $db = new PDO("ibm:HOSTNAME=XXX.XXX.XXX.XXX;DATABASE=TEST001;PORT=50000;PROTOCOL=TCPIP;UID=db2inst1;PWD=pass;");
            echo "OK";
  
        }
        catch (PDOException $e)
        {
            echo $e->getMessage();
        }



На ноуте вроде взлетело :)

Щас попробую на сервере, если получится напишу в итоге весь список действий которые делал
...
Рейтинг: 0 / 0
Подключение к DB2 базе из windows
    #38037509
IgorKonovalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Жень, привет!
А в чем прикол катологизировать базу, если к ней все равно через remote обращаются? Или я уже что-то подзабыл...
...
Рейтинг: 0 / 0
Подключение к DB2 базе из windows
    #38037575
IgorKonovalov,

Привет!
В данном случае чтобы проверить, что клиентские библиотеки DB2 нормально "цепляются" к конкретной СУБД.
Т.к. из командной строки DB2 нельзя обратиться к некаталогизированной базе данных.
В этом случае вылезла ошибка с отсутствием пакета клиента в базе (NULLID.SQLC2G15 0X41414141414C4959).

В общем случае я считаю правильной практикой прописывать базы в каталоге клиента, а в строке соединения указывать только алиас каталога. Это для всех случаев, когда наличие платформенного клиента является обязательным (Perl, PHP, CLI, ODBC и т.п.). Исключением является Java JDBC, т.к. для его работы с удаленной базой клиент не требуется.

Прописывание ссылок на базу с IP-адресами, портами и т.п. в скриптах считаю не очень удобной практикой, т.к. в случае переезда базы придется все это заменять и скорее всего сразу в нескольких (а может и очень многих местах).
В случае алиаса - скрипт не нужно менять. Строка соединения в скрипте будет одинакова и для локальной СУБД и для удаленной.
...
Рейтинг: 0 / 0
Подключение к DB2 базе из windows
    #38037624
IgorKonovalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Евгений ХабаровIgorKonovalov,

В общем случае я считаю правильной практикой прописывать базы в каталоге клиента, а в строке соединения указывать только алиас каталога. Это для всех случаев, когда наличие платформенного клиента является обязательным (Perl, PHP, CLI, ODBC и т.п.). Исключением является Java JDBC, т.к. для его работы с удаленной базой клиент не требуется.

Прописывание ссылок на базу с IP-адресами, портами и т.п. в скриптах считаю не очень удобной практикой, т.к. в случае переезда базы придется все это заменять и скорее всего сразу в нескольких (а может и очень многих местах).
В случае алиаса - скрипт не нужно менять. Строка соединения в скрипте будет одинакова и для локальной СУБД и для удаленной.
На счет удобства это да. Согласен. Но приложение может использовать конфиги ;) а не хардкод. Так что это нивелируется. Более важный вопрос это наличие прямого соединения с базой без использования пулов.
...
Рейтинг: 0 / 0
Подключение к DB2 базе из windows
    #38037655
IgorKonovalovНа счет удобства это да. Согласен. Но приложение может использовать конфиги ;) а не хардкод. Так что это нивелируется. Более важный вопрос это наличие прямого соединения с базой без использования пулов.
Согласен, это нивелируется, при выработанной "культуре программирования".
Сама же платформа "PHP" допускает написание очень "грязного" кода, за что мне и не нравится.
Пулы соединений и там можно организовать, но про это нужно задуматься, прочитать и настроить.
Сама платформа не настраивает изначально на использование пулов.

Поэтому я остаюсь поклонником J2EE, с разделением и изоляцией уровней приложения/сервера, с общим управлением ресурсами (пулами), с общей аутентификацией/авторизацией и т.п. прелестями. Хотя и там можно написать "грязный код", но платформа J2E (ИМХО) приучает к использованию готовых сервисов/интерфейсов и подходов, а не к изобретению велосипедов.
...
Рейтинг: 0 / 0
Подключение к DB2 базе из windows
    #38037690
IgorKonovalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Евгений ХабаровСама же платформа "PHP" допускает написание очень "грязного" кода, за что мне и не нравится.
Пулы соединений и там можно организовать, но про это нужно задуматься, прочитать и настроить.
Сама платформа не настраивает изначально на использование пулов.

Поэтому я остаюсь поклонником J2EE, с разделением и изоляцией уровней приложения/сервера, с общим управлением ресурсами (пулами), с общей аутентификацией/авторизацией и т.п. прелестями. Хотя и там можно написать "грязный код", но платформа J2E (ИМХО) приучает к использованию готовых сервисов/интерфейсов и подходов, а не к изобретению велосипедов.

Грязный код можно написать на любом языке, это вообще не вопрос языка, а опыта человека, который его пишет.
А резюме все этого:
1) не используйте прямое соединение с базой.
2) пользуйтесь пулам.
3) каталогизировать базу или прописывать конфиги на ремоут - дело вкуса. Но IBM рекомендует все же каталогизировать, да и с точки зрения администрирования лучше каталогизировать. Так как людей, которые разбираются в ODBC DataSource-ах и в DB2 CLI намного больше, чем людей разбирающихся в конфигах Вашего приложения.
...
Рейтинг: 0 / 0
Подключение к DB2 базе из windows
    #38037705
IgorKonovalovЕвгений ХабаровСама же платформа "PHP" допускает написание очень "грязного" кода, за что мне и не нравится.
Пулы соединений и там можно организовать, но про это нужно задуматься, прочитать и настроить.
Сама платформа не настраивает изначально на использование пулов.

Поэтому я остаюсь поклонником J2EE, с разделением и изоляцией уровней приложения/сервера, с общим управлением ресурсами (пулами), с общей аутентификацией/авторизацией и т.п. прелестями. Хотя и там можно написать "грязный код", но платформа J2E (ИМХО) приучает к использованию готовых сервисов/интерфейсов и подходов, а не к изобретению велосипедов.

Грязный код можно написать на любом языке, это вообще не вопрос языка, а опыта человека, который его пишет.
А резюме все этого:
1) не используйте прямое соединение с базой.
2) пользуйтесь пулам.
3) каталогизировать базу или прописывать конфиги на ремоут - дело вкуса. Но IBM рекомендует все же каталогизировать, да и с точки зрения администрирования лучше каталогизировать. Так как людей, которые разбираются в ODBC DataSource-ах и в DB2 CLI намного больше, чем людей разбирающихся в конфигах Вашего приложения.
+100500
Был бы здесь FAQ, однозначно бы туда это резюме.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Подключение к DB2 базе из windows
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]