Назад | Перейти на главную страницу

Настройка мгновенного клиента Oracle на CentOS / RHEL Linux - для PHP и Perl

Я пытаюсь настроить виртуальную машину CentOS 5.5 / 64 bit для доступа к удаленной базе данных Oracle с помощью сценариев PHP и Perl. (У меня нет опыта работы с Oracle, раньше я программировал и администрировал только PostgreSQl и MySQL.)

Я установил следующие rpms Oracle Instant Client:

oracle-instantclient11.2-basic-11.2.0.2.0.x86_64.rpm
oracle-instantclient11.2-devel-11.2.0.2.0.x86_64.rpm
oracle-instantclient11.2-sqlplus-11.2.0.2.0.x86_64.rpm

И добавили в мой .bash_profile следующие переменные:

export TNS_ADMIN=/etc
export ORACLE_HOME=/usr/lib/oracle/11.2
export LD_LIBRARY_PATH=$ORACLE_HOME/client64/lib
PATH=$PATH:$HOME/bin:/sbin:$ORACLE_HOME/client64/bin

В файл /etc/tnsnames.ora Я написал информацию, полученную от коллеги с удаленного сайта, на котором работает база данных Oracle:

some_string =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = my_address)(PORT = my_port))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = PDTT)
    )
  )

Приятно то, что теперь я могу подключиться из интерфейса командной строки, запустив

sqlplus 'my_user/my_password@//my_address:my_port/PDTT'

а затем можно просмотреть некоторые таблицы, выполнив:

select table_name from user_tables;

А еще я бегал sudo pecl install oci8 успешно, добавил файл /etc/php.d/oci8.ini содержащий:

extension=oci8.so

и можно увидеть следующий вывод phpinfo ()

Теперь мои вопросы и проблемы, пожалуйста:

1) Как мне настроить переменную ORACLE_SID и как вызвать sqlplus после ее установки? Могу ли я использовать ORACLE_SID из сценариев PHP и Perl?

2) я бегу sudo -E perl -MCPAN -e shell и он хорошо работает при установке других модулей Perl, но для "установить DBD :: Oracle" он не работает с:

  CPAN.pm: Going to build T/TI/TIMB/DBD-Oracle-1.26.tar.gz

Using DBI 1.52 (for perl 5.008008 on x86_64-linux-thread-multi) installed in /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/auto/DBI/

Configuring DBD::Oracle for perl 5.008008 on linux (x86_64-linux-thread-multi)

Remember to actually *READ* the README file! Especially if you have any problems.

  The ORACLE_HOME environment variable value (/usr/lib/oracle/11.2) is not valid.
  It must be set to hold the path to an Oracle installation directory
  on this machine (or a machine with a compatible architecture).
  For an Instant Client install, the directory should include an sdk subdirectory.
  See the appropriate README file for your OS for more information.
  ABORTED!
Running make test
  Make had some problems, maybe interrupted? Won't test
Running make install
  Make had some problems, maybe interrupted? Won't install

Выше упоминается каталог "sdk", но в rpm этого каталога вообще не было:

# rpm -ql oracle-instantclient11.2-devel | grep -i sdk
#

Благодарим вас за любые подсказки, а также за любые полезные советы по установке и использованию Oracle. Информации об Oracle много, но часто предполагается, что Oracle установлен на том же компьютере.

У меня такая же проблема. РЕШЕНО с настройкой переменной окружения ORACLE_HOME, например:

export ORACLE_HOME=/usr/lib/oracle/11.2/client64

А внутри $ ORACLE_HOME у меня есть соответствующие подкаталоги:

мусорное ведро lib SDK

После этого я смог установить DBD :: Oracle просто хорошо.

Для вопроса №1 для доступа к удаленной базе данных ORACLE_SID не имеет значения. ORACLE_SID полезен только тогда, когда клиент и сервер работают на одном хосте. Учитывая ваш файл tnsnames.ora, вы сможете подключиться к удаленной базе данных, используя:

sqlplus my_user@some_string

вы также можете использовать

sqlplus my_user/my_password@some_string

Однако я обычно избегаю указывать пароли в командной строке - любопытные пользователи и команда ps иногда могут выдать их. Позвольте базе данных запросить пароль. Фактически, я только что приобрел привычку вводить команду sqlplus следующим образом:

sqlplus /nolog

а затем при быстрой выдаче

connect my_user/my_password@some_string

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

Что касается вопроса №2, не могу вам помочь.

РЕДАКТИРОВАТЬ:

Что ж, может я смогу помочь с №2. я нашел эта ссылка на использование DBD с мгновенным клиентом. По-видимому, вам также нужно загрузить / установить мгновенный клиент sdk. См. Шаг 3 по ссылке.

1) Если вы хотите не использовать @connect_string, вы можете установить для переменной среды TWO_TASK псевдоним tnsnames (в данном случае some_string).

То же самое достигается с помощью переменной LOCAL в окнах.

2) Похоже, что sudo сбрасывает переменные среды. Вам нужно будет добавить $ ORACLE_HOME и, возможно, другие в строку env_keep в вашем файле sudoers. Обсуждаются другие изменения в файле sudoers, которые будут делать то же самое. Вот.