Я пытаюсь настроить 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