Не удалось подключиться к oci_connect

У меня возникла серьезная проблема с подключением внешнего ORA DB 11g от локального сервера Zend CE. OCI8 включен и работает версия 1.4.6 (из-за phpinfo() ).

Я попробовал много вариантов подключения (перечисленные ниже) с той же ошибкой, что и возвращенный:

 oci_connect(): ORA-28547: connection to server failed, probable Oracle Net admin error 

После googling на целый день я могу только сказать, что эта ошибка означает, что PHP смог общаться с сервером, но не смог подключиться к конкретной службе / базе данных и что ошибка не должна исходить от самого PHP …

Я установил переменную среды TNS_ADMIN в c:\oracle_instantclient_11_2 где находится файл tnsnames.ora содержащий это описание соединения:

 MYDB = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = XXXX)(PORT = 1521)) ) (CONNECT_DATA = (SID = MYDB)(SERVER = DEDICATED)) ) 

Используя это описание, например

 (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=XXXX)(PORT=1521)))(CONNECT_DATA=(SID=MYDB)(SERVER=DEDICATED))) 

Я могу подключиться к серверу и службе / базе данных с помощью консоли sqlplus , поэтому соединение очень правильное. Я также использую те же самые HOST, PORT и SID для подключения к серверу с Sqldeveloper инструмента Sqldeveloper . Проблема в том, что при подключении к серверу в PHP …

Что я пробовал до сих пор:

 oci_connect("user", "password", "XXXX:1521", "AL32UTF8", 0); oci_connect("user", "password", "MYDB", "AL32UTF8", 0); oci_connect("user", "password", "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=XXXX)(PORT=1521)))(CONNECT_DATA=(SID=MYDB)(SERVER=DEDICATED)))", "AL32UTF8", 0); 

Все эти вызовы oci_connect выше возвращают ту же самую ошибку.

Я также пробовал использовать ezconnect для 11g, как указано здесь – [//]host_name[:port][/service_name][:server_type][/instance_name] :

 oci_connect("user", "password", "XXXX:1521/MYDB", "AL32UTF8", 0); 

но проблема в том, что я не знаю service name , только service ID ( SID ), поэтому возвращенная ошибка такова:

 oci_connect(): ORA-12514: TNS:listener does not currently know of service requested in connect descriptor 

что нет службы, работающей с предоставленным именем службы (или что слушатель ORA не знает о такой службе).

Версия PHP: 5.3.14
Appache v .: 2.2.22 (32bit) Zend
Сервер Zend CE: 5.3.6

Информация о PHP для OCI8:

 OCI8 Support enabled Version 1.4.6 Revision $Revision: 313688 $ Active Persistent Connections 0 Active Connections 0 Oracle Instant Client Version Unknown Temporary Lob support enabled Collections support enabled Directive Local Value Master Value oci8.connection_class no value no value oci8.default_prefetch 100 100 oci8.events Off Off oci8.max_persistent -1 -1 oci8.old_oci_close_semantics Off Off oci8.persistent_timeout -1 -1 oci8.ping_interval 60 60 oci8.privileged_connect Off Off oci8.statement_cache_size 20 20 

Возможно, проблема в том, что unknown версия Oracle instant client хотя это путь, задается как в PATH среды TNS_ADMIN и в PATH

Мой вопрос: кто-нибудь знает, что я сделал неправильно? Я что-то упускаю? У меня вчера был целый день в googled, поэтому, вероятно (с вероятностью 99%) любые ссылки google, которые вы хотели бы предоставить мне, я уже видел и пытался …

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

Solutions Collecting From Web of "Не удалось подключиться к oci_connect"

Из-за нескольких неправильных конфигураций и 3-х дней, потерянных при поиске решения, я перешел на Linux-сервер, и все проблемы исчезли.

Что я нашел:

  • как php_oci8.dll и php_oci8_11g.dll зависят от библиотек Oracle Instant Client
    • эти библиотеки не содержат функций oci_ (например, oci_connect ), только ociX функции (например, ociLogon ), что странно …
  • хотя я уверен, что загрузил Oracle Instant Client Basic и все расширения, я не смог подключиться к другому серверу Oracle из-за неизвестной кодировки, и ошибка заключалась в том, что я использую только мгновенный клиент Lite
  • Я попробовал как 64-битную, так и 32-битную клиентскую версию без изменений
  • мой Apache – 64-битный, 64-битный, PHP – 32-битный, удаленный сервер Oracle – 64-битный, удаленный сервер Linux – 64-битный …
  • попробовал множество настроек среды ( ORA_HOME , TNS_ADMIN , скорректировал PATH чтобы посмотреть на мгновенную установку клиента) безрезультатно
  • попытался удалить локальный сервер Oracle XE из-за возможных помех в настройках среды безрезультатно
  • почти потерял голову – безрезультатно …

Итак, окончательно на сервере Linux у меня нет проблем с подключением к удаленному серверу Oracle. Где-то (во время просмотра более тысячи связанных с PHP-Oracle страниц) я нашел информацию о том, что «не нужно разрабатывать приложение PHP, подключающееся к серверу Oracle под окнами», и вместо этого следует придерживаться системы UNIX …

Так что любой, кто сталкивается с подобными или одинаковыми проблемами – будьте так добры и не тратьте свое время, установите VirtualBox, запустите Linux и продвигайтесь вперед!

для подключения php к Oracle 11g версии 11.2 вам нужно сделать следующее;

Шаг 1: войдите в систему db с помощью sys as sysdba и выполните следующие сценарии.

**

 execute dbms_connection_pool.start_pool(); execute dbms_connection_pool.restore_defaults(); 

**

Шаг 2: в вашем скрипте PHP

**

 $conn = oci_connect("username", "password", "//hostname/servicename"); if (!$conn) { $m = oci_error(); echo $m['message'], "\n"; exit; } else { print "Connected to Oracle!"; } // Close the Oracle connection oci_close($conn); 

**

Примечание: i). Убедитесь, что приложения PHP_OCI8 и PHP_OCI8_11g включены

II). Oracle 11 чувствителен к регистру.

С наилучшими пожеланиями Ясир Хашми

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

решение очень просто, но не документировано в документации PHP

поэтому давайте возьмем пример PHP:

$ conn = oci_connect ('hr', 'welcome', 'localhost / XE');

что они не упомянули, это то, что он указывает на порт по умолчанию на сервере.

если ваш настроен на другой, вам нужно указать это. см. новый пример ниже:

$ conn = oci_connect ('hr', 'welcome', 'localhost: 1234 / XE');

попробуйте это с вашим указанным портом.

Надеюсь это поможет

Просто добавив свои два цента, так как я ударил головой о стену с помощью этого … Если все остальное не удается, попробуйте это, как только вы скачали мгновенный клиент, http://www.oracle.com/technetwork/topics/ winsoft-085727.html , скопируйте извлеченное содержимое в папку apache / bin. Вероятно, вы попросите переписать файл oci.dll. Сделайте это, затем перезапустите apache / php. С удачей это устранит проблему …

Удачи.

Мое решение в Fedora 17:

 1. yum install httpd httpd-devel. 2. yum install php php-mysql php-pear php-devel 3. Install oracle instantclient: rpm -Uvh oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm rpm -Uvh oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm 4. pecl install oci8 This gives: ** downloading oci8-1.4.7.tgz ... Starting to download oci8-1.4.7.tgz (Unknown size) .....done: 168,584 bytes 10 source files, building running: phpize Configuring for: PHP Api Version: 20100412 Zend Module Api No: 20100525 Zend Extension Api No: 220100525 Please provide the path to the ORACLE_HOME directory. Use 'instantclient,/path/to/instant/client/lib' if you're compiling with Oracle Instant Client [autodetect] :' ** Just press enter. 5. Enable the OCI8 extension by creating a file, oci8.ini for example, with the following line at /etc/php.d/: extension=oci8.so 6. service httpd restart