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

Oracle 11g + Nginx + php-fpm

Я пытаюсь настроить php / nginx для подключения к базе данных Oracle.

Все на одном сервере (тестирование)

Я установил nginx и настроил его, он работает. Я настраиваю php и php-fpm, и он отлично работает (протестировал некоторые вещи php)

Я установил модуль oci8 с помощью pecl install oci8 и указал путь к моему oracle_home, он скомпилировался отлично.

но я не могу подключиться к базе данных.

Я пробовал несколько сценариев.

Я новичок в оракуле.

журнал www-ошибок для php-fpm говорит, что нужно проверить мой путь к библиотеке oracle_home и ld. Я установил оба в своем php-скрипте в качестве теста и все еще не прошел.

Любые идеи?

<?php
PutEnv("ORACLE_SID=orcl");
PutEnv("ORACLE_HOME=/opt/app/oracle/product/11.2.0/dbhome_1/");
PutEnv("TNS_ADMIN=/opt/app/oracle/product/11.2.0/dbhome_1/network/admin");
PutEnv("LD_LIBRARY_PATH=/opt/app/oracle/product/11.2.0/dbhome_1/lib");
   $c = oci_connect("testuser", "testpassword", "127.0.0.1");
   if (!$c) {
     echo "Unable to connect: " . var_dump( oci_error() );
     die();
   }

ETCETC

из журнала ошибок:

[10 декабря 2010 17:25:58] Предупреждение PHP: oci_connect (): OCIEnvNlsCreate () не удалось. Что-то не так с вашей системой - убедитесь, что ORACLE_HOME и LD_LIBRARY_PATH установлены, и указывают на правильные каталоги в /usr/share/nginx/html/orcl2.php в строке 6

РЕДАКТИРОВАТЬ: я добавил пользователя nginx в группу oinstall для целей тестирования, и теперь я получаю более качественные сообщения об ошибках, поэтому я продвигаюсь дальше.

теперь ошибка:

array (4) {["code"] => int (12504) ["message"] => string (70) "ORA-12504: TNS: слушателю не было присвоено SERVICE_NAME в CONNECT_DATA" ["смещение"] => int (0) ["sqltext"] => string (0) ""} Невозможно подключиться:

EDIT2: после выполнения следующих действий я теперь могу использовать команду sqlplus для соединения с моим тестовым пользователем, но php по-прежнему не работает.

SQL> alter system set LOCAL_LISTENER='10.99.101.2' scope=both;
SQL> alter system register;

SQL> alter system set SERVICE_NAMES='10.99.101.2' scope=both;

EDIT3: если я использую командную строку php для запуска моего тестового скрипта, он работает нормально, поэтому что-то не так с переменными Nginx / env для указанного nginx.

EDIT4: Listener.ora:

SID_LIST_LISTENER =
 (SID_LIST =
   (SID_DESC =
     (SID_NAME = orcl)
     (ORACLE_HOME = /opt/app/oracle/product/11.2.0/dbhome_1/)
     (PROGRAM = extproc)
   )
 (SID_DESC=
       (GLOBAL_DBNAME=orcl)
       (ORACLE_HOME=/opt/app/oracle/product/11.2.0/dbhome_1/)
       (SID_NAME=orcl)
  )
 )
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.99.101.2)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = /opt/app/oracle

tnsnames.ora:
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.99.101.2)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCL)
    )
  )

sqlnet.ora
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

ADR_BASE = /opt/app/oracle

Ваша строка подключения неверна. Вы уверены, что "orcl"- это SID вашей базы данных, а не имя службы или имя записи в tnsnames.ora (должно быть в $ TNS_ADMIN /)?

Каков результат следующих команд?

$ORACLE_HOME/bin/tnsping orcl
$ORACLE_HOME/bin/lsnrctl status

Можете ли вы подключиться к своей базе данных с помощью следующей команды?

$ORACLE_HOME/bin/sqlplus "testuser"/"testpassword"@orcl