В настоящее время мы переключаем наши приложения для работы на компьютере под управлением Linux и подключения к IBMi через DB2 Connect.
До сих пор мы установили db2 connect, добились успеха в настройке фиктивной базы данных в linux, создании соединения и запуске SQL из Linux в IBMi (как через командную строку, так и из наших Zend Applications) — но только когда мы определяем библиотеки для файлов в наших SQL.
В настоящее время мы используем Zend Server 7, Ibm db2 V1.9.7 и DB2 Connect 10.5 на нашем Linux-боксе вместе с php версии 5.5.
Было отмечено, что в новой версии Db2 connect 10.5 и ibm_db2 1.9.7 поддерживается поддержка имен системы в LUW. http://yips.idevcloud.com/wiki/index.php/PHP/DB2Connection увидеть первую строку.
Однако нам не удалось заставить DB2_I5_NAMING_ON работать на нашем компьютере с Linux, чтобы мы могли не указывать библиотеки.
Вот пример того, что мы пытаемся запустить из Zend.
$driverOptions = array('i5_libl' => 'library1 library2','i5_naming' => DB2_I5_NAMING_ON, 'i5_lib'=>'library1');
$config = array(
'adapter' => 'Db2',
'params' => array(
'username' => $user,
'password' => $password,
'dbname' => $database,
'driver_options'=> $driverOptions
)
);
$config = new Zend_Config($config);
$db = Zend_Db::factory($config);
$select = $db->select()->from("FILENAMEHERE");
$result = $select->query();
Однако мы продолжаем получать это сообщение
Message: [IBM][CLI Driver][AS] SQL0204N "USERSNAMEHERE.FILENAMEHERE" is an undefined name. SQLSTATE=42704 SQLCODE=-204
Он добавил имя пользователя для библиотеки и не будет использовать указанный список библиотек (между ними указывается «.», Что говорит о том, что он все еще использует именование sql вместо системного).
Мы также включили ibm_db2.i5_sys_naming=1
в нашем файле ibm_db2.ini.
Кто-нибудь знает о каких-либо других изменениях конфигурации, которые должны были бы произойти для того, чтобы система именования работала или знала, или по какой-либо причине, по которой у нас могут возникнуть такие проблемы?
Любая помощь будет принята с благодарностью.
Я знаком с DB2 на IBM i, но не с PHP.
Я бы попробовал удалить
'i5_lib'=>'library1'
Это может быть установка вашей CURRENT SCHEMA, которая будет активировать режим именования SQL, а не системное именование.
После подключения, если вы пытаетесь определить библиотеку по умолчанию для объектов, которые должны быть созданы, рассмотрите возможность использования команды CL CHGCURLIB. Это поместит эту библиотеку перед пользовательской частью вашего списка библиотек.
CALL QCMDEXC ('CHGCURLIB somelib');
Эта проблема была связана с тем, что машина IBMi, к которой мы подключались, работала с OS 6.1. IBMi V7R1 была улучшена для обеспечения управления режимом именования. В настоящее время мы работаем над тем, чтобы получить доступ к коробке под управлением V7.1, которая должна решить наши проблемы.