Oracle

Материал из Eludia
Перейти к: навигация, поиск


Note.jpg Эта заметка не претендует на энциклопедичность. Она не отличается ни широтой охвата, ни строгостью формулировок. Это просто записочка на память.

Эта страница — шпаргалка, куда следует записывать решения всех проблем, связанных с настройкой подключения Eludia-приложений к СУБД Oracle.

Установка DBD::Oracle под RedHat 5.4 на x64 и Oracle Instant Client 11.2

Первым делом, отключить selinux. Далее, в директории, распакованной из CPAN-архива:

export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$PATH
export ORACLE_USERID="user/password@host:1521/SERVICE"
perl Makefile.PL -m /usr/share/oracle/11.2/client64/demo.mk -h /usr/include/oracle/11.2/client64/
make

Видимость каталогов Oracle для процесса httpd

Иногда случается такое: вроде бы DBD::Oracle установлен (тесты проходят, отдельно стоящие скрипты работают), однако в STDERR WEB-приложения пишется нечто вроде

install_driver(Oracle) failed: Can't load '...Oracle.so'

Обычно это значит, что со стороны Apache что-то недонастроено по поводу путей к клиенту Oracle.

Прежде всего, необходимо проверить переменные окружения: ORACLE_HOME обязательно должна быть установлена, а LD_LIBRARY_PATH (на некоторых платформах, возможно, SHLIB_PATH, а под Win32 — PATH) должна содержать "$ORACLE_HOME/lib".

Кроме того, сам "$ORACLE_HOME/lib" должен быть доступен на чтение для пользователя Apache (www-data, nobody или иного, в зависимости от директивы User в httpd.conf).

Кодировки и формат даты

Вообще, наша кодировка для русскоязычных приложений cp1251, а формат даты — ISO. И то и другое — для использования алфавитного порядка сортировки. В случае Oracle это соответствует NLS_LANG = "american_america.CL8MSWIN1251" и NLS_DATE_FORMAT "yyyy-mm-dd". Вопрос — как передать данные значения параметров так, чтобы Oracle-клиент, загруженный в наше WEB-приложение, воспринял их, а не умолчания.

  • Сервер БД: Oracle9i Enterprise Edition Release 9.2.0.1.0 под Windows 2003 Server
  • Клиентская часть: Oracle XE 10.2.0.1.0 / Linux, DBD::Oracle 1.19
  • Сервер приложения: Apache/1.3.34, mod_perl/1.29
  • Решение: прописать в httpd.conf на верхнем уровне
 PerlSetEnv NLS_LANG             "american_america.CL8MSWIN1251"
 PerlSetEnv NLS_DATE_FORMAT      "YYYY-MM-DD"
 PerlSetEnv NLS_TIMESTAMP_FORMAT "YYYY-MM-DD HH24:MI:SS"

При переходе на Apache/2.2.3, mod_apreq2-20051231/2.6.0, mod_perl/2.0.2 на том же сервере донести конфигурацию до Oracle получилось только указав явно ORACLE_HOME и внеся определение ENV-переменных непосредственно в perl-секцию:

<Perl > 

 $ENV {ORACLE_HOME}            = "..."; # см. результат команды set
 $ENV {NLS_LANG}               = "american_america.CL8MSWIN1251";
 $ENV {NLS_DATE_FORMAT}        = "YYYY-MM-DD";
 $ENV {NLS_TIMESTAMP_FORMAT}   = "YYYY-MM-DD HH24:MI:SS";

 ...

</Perl>
Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Разработчику
Администратору
Инструменты