У меня возникла серьезная проблема с подключением внешнего 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, которые вы хотели бы предоставить мне, я уже видел и пытался …
Хотя этот вопрос можно считать точным дубликатом этого – он еще не ответил, и я думаю, что никто не вернется к этому старому вопросу, даже если я опубликую комментарий, у меня тоже проблемы с соединением. Также имейте в виду, что в этом подобном вопросе возвращается и спрашивается другая ошибка.
Из-за нескольких неправильных конфигураций и 3-х дней, потерянных при поиске решения, я перешел на Linux-сервер, и все проблемы исчезли.
Что я нашел:
php_oci8.dll
и php_oci8_11g.dll
зависят от библиотек Oracle Instant Client
oci_
(например, oci_connect
), только ociX
функции (например, ociLogon
), что странно … ORA_HOME
, TNS_ADMIN
, скорректировал PATH
чтобы посмотреть на мгновенную установку клиента) безрезультатно Итак, окончательно на сервере 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 включены
С наилучшими пожеланиями Ясир Хашми
У меня была такая же проблема и я попытался подключиться с локальной машины к удаленному серверу. после двух недель тринга я, наконец, получил его на работу.
решение очень просто, но не документировано в документации 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