Мгновенное подключение клиента Oracle 11 к удаленному серверу Oracle 8i: ошибка ORA-12514

Я столкнулся с проблемой, на устранение которой потратил часы. Вот в чем проблема:

Я пытаюсь подключиться к удаленному серверу Oracle 8i с помощью мгновенного клиента Oracle 11: вот моя строка подключения в PHP:

$ conn = oci_connect ('db_user', 'db_pass', «db_ip / db_service»);

db_ip - это IP-адрес сервера, например «12.34.56.78».
db_service - это служба сервера, например «test».

Показанная ошибка

ORA-12514: TNS: слушатель в настоящее время не знает службы, запрошенной в дескрипторе подключения

Я мог бы использовать того же клиента для подключения к другому серверу Oracle 10g. Код PHP такой же, только измените db_user, db_pass или db_ip. db_service не предоставляется.

Я не использую tnsnames.ora ни для сервера oracle 10g, ни для сервера oracle 8i. Я просто использую простой IP-адрес сервера. Имеет ли это значение?

Server using: Windows Server 2008 R2
PHP: php 5.2.17
Oracle Instant Client: 11_2

Любые идеи будут оценены по достоинству.

Обновленный PHP теперь также может работать. Моя папка php находится в Programfiles (x86), скобки не допускаются. Поэтому я переместил всю папку в C: \ php и настроил IIS для изменения версии php. Ссылка: http://stackoverflow.com/questions/9215983/php-cant-connect-but-sqlplus-can

Обновлено Большое спасибо за помощь Джастина. Оно работает!!! Я просто сменил sid на scblive вместо SCBLIVE. Их база данных называется scblive. Я все еще использую 10.2.0.1, используя sqlplus, я могу подключиться как к oracle 10g, так и к oracle 8i. Большое спасибо !!

Это имена tns, которые работают для Oracle 8i:

scblive = (ОПИСАНИЕ = (АДРЕС = (ПРОТОКОЛ = TCP) (ХОСТ = [ip oracle 8i]) (ПОРТ = 1521)) (CONNECT_DATA = (СЕРВЕР = ВЫДЕЛЕННЫЙ) (SID = scblive)))

Еще одна проблема, обнаруженная в коде php, показывает ту же ошибку для oracle 10g или oracle 8i.

ORA-12154: TNS: не удалось разрешить указанный идентификатор подключения

Я просто использовал следующую строку подключения:

$ conn = oci_connect ('имя_пользователя', 'пройти', 'scblive');

для oracle 10g, если я использовал ту же строку подключения, что и раньше, ошибка все равно отображается:

$ conn = oci_connect ('имя_пользователя', 'пройти', [IP-адрес Oracle 10g]);

Любые идеи?

Более раннее обновление: спасибо за помощь @ Justin. пробовали 10.2.0.5, 10.2.0.4 или 10.1.0.0, ни один из них не работал. Я видел матрицу. кажется, что мгновенный клиент 8.1.7 или мгновенный клиент 9.0.1 может работать как для Oracle 10g, так и для Oracle 8i. У кого-нибудь есть ссылка на эти файлы? Oracle может предоставить только 10.1.0.5 и новее.


person Community    schedule 28.08.2012    source источник
comment
Обратите внимание, что 10.2.0.5 была первой версией клиента Oracle, которая работала на сервере Windows Server 2008 R2 (и эта поддержка должна была быть перенесена обратно - первоначальная цель заключалась не в поддержке клиентов 10.2 в Windows 2008 R2). Если вам нужна более ранняя версия клиента Oracle, вам нужно будет установить на сервере другую версию Windows. Затем вы можете отправить запрос в службу поддержки Oracle, чтобы получить более старые версии программного обеспечения. Продукт Instant Client также относительно новый - если вам нужен клиент 8.1.7 или 9.0.1, это должен быть полный клиент.   -  person Justin Cave    schedule 29.08.2012


Ответы (2)


Это ожидаемое поведение. Клиент 11.2 не сертифицирован для подключения к какой-либо версии Oracle 8i. Вам понадобится как минимум база данных Oracle 9.2.0.4. Если вы хотите подключиться к базе данных 8.1.7, вам понадобится клиент Oracle 10.2 или более ранней версии. Первоначальные версии клиента 10.2 были несовместимы с системой Windows Server 2008 R2, но должна быть возможность установить набор исправлений клиента 10.2.0.5. Если вы хотите подключиться к базе данных Oracle более ранней, чем 8.1.7, вам потребуется более ранняя версия клиента Oracle, для которой, вероятно, потребуется установка более ранней версии Windows.

Если у вас есть доступ к Metalink, Metalink 207303.1 является клиентом / сервером Матрица взаимодействия.

Если у вас действительно установлен полный клиент 10.2.0.5, ваш псевдоним TNS должен использовать SID. Имена сервисов не существовали еще в 8.1.7. Вероятно, вы захотите скопировать псевдоним TNS с машины, которая может подключаться к базе данных 8.1.7. Я предполагаю, что ты хочешь

SCBLIVE = 
  (DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = [ORACLE 8i IP])(PORT = 1521)) 
    (CONNECT_DATA = (SERVER = DEDICATED)(SID = SCBLIVE)) 
  )

Если это не сработает, введите в командной строке tnsping scblive, скопируйте и вставьте результаты.

person Justin Cave    schedule 28.08.2012
comment
Большое спасибо. Я только что установил мгновенный клиент 10.2.0.5 win32 (я использовал 32-битную версию 11.2), но он по-прежнему не может работать. Модуль oci не может быть загружен. Указанный модуль не может быть найден, поэтому я даже не могу подключить oracle 10g с помощью этого клиента. Я прошу серверных людей позволить им проверить версию Oracle, чтобы узнать, 8.1.7 или более ранняя. - person user1631658; 29.08.2012
comment
@ user1631658 - Ваш сервер Windows 2008 R2 не 64-битный? Казалось бы, вам понадобится 64-битный клиент. Я предполагаю, что Instant Client 10.2.0.5 поддерживается в Windows Server 2008 R2. Однако вы можете протестировать полную установку клиента. - person Justin Cave; 29.08.2012
comment
Только что проверил. 64bit 10.2.0.5 тоже не может работать. та же проблема MSVCR71.DLL отсутствует на вашем компьютере - person user1631658; 29.08.2012
comment
можно было использовать sqlplus, переместив MSVCR71.dll в эту папку, и теперь можно было загрузить модуль oci. но по-прежнему получаю ошибку ORA-12514 для сервера oracle 8i, теперь также получаем ошибку ORA-12514 для сервера oracle 10g. Любые идеи? - person user1631658; 29.08.2012
comment
для полноценного клиента мне нужно установить Oracle 8.1.7 или 9.01. ? - person user1631658; 29.08.2012
comment
Я проверил версию сервера oracle 8i: 8.1.7.0.0. Instant client 10.2.0.5 не может с этим работать? - person user1631658; 29.08.2012
comment
@ user1631658 - Я ожидал, что Instant Client 10.2.0.5 будет работать с базой данных 8.1.7.0.0 и что Instant Client 10.2.0.5 будет поддерживаться в Windows Server 2008 R2. Но вы находитесь на самом краю обоих: 10.2 - это последняя версия клиента, которая когда-либо поддерживалась для подключения к 8.1.7.0, а 10.2.0.5 - самая первая версия клиента, которая поддерживалась в Windows Server 2008 R2. Кроме того, вы используете Instant Client, а не полный клиент, что еще больше усложняет ситуацию. Я бы попробовал полную версию клиента 10.2.0.5, чтобы убедиться, что это работает. - person Justin Cave; 29.08.2012
comment
Мы установили полный клиент Oracle 8.1.7, модуль oci не загружается. Я попытался использовать sqlplus для подключения к удаленному серверу Oracle, но все равно не удалось. Можем ли мы использовать ODBC для подключения вместо oci? - person user1631658; 30.08.2012
comment
@ user1631658 - Клиент 10.2.0.5 был первой версией клиента, которая поддерживалась в Windows Server 2008 R2. Если вы не переходите на другую операционную систему на сервере, я бы не ожидал, что более ранняя версия полного клиента успешно установится или будет работать правильно. И никакая более поздняя версия клиента не будет подключаться к базе данных 8.1.7.0. 10.2.0.5 - единственная версия клиента, которая, как я ожидал, будет работать с комбинацией клиентской операционной системы и версии сервера, которую вы пытаетесь использовать (одна из проблем, связанных со смешиванием старых и современных версий программного обеспечения). - person Justin Cave; 30.08.2012
comment
@ user1631658 - Обновил свой ответ - person Justin Cave; 31.08.2012
comment
Большое спасибо. В соответствии с этим я изменил свой tnsname.ora. все еще показывает TNS-12541: TNS: no listerner. содержимое выглядит следующим образом: Попытка связаться (Описание = (ADDRESS = (PROTOCOL = TCP) (HOST = [IP]) (PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SID = SCBLIVE))) TNS- 12541: TNS: нет слушателя - person user1631658; 31.08.2012
comment
Привет, Джастин, это работает !!! Я сменил sid на scblive вместо SCBLIVE. Их база данных называется scblive. Я все еще использую 10.2.0.1, используя sqlplus, я могу подключиться как к oracle 10g, так и к oracle 8i. Большое спасибо !! - person user1631658; 31.08.2012
comment
Вот еще одна проблема. в php он не может работать ни с oracle 10g, ни с oracle 8i. Я использую sth как oci_connect ('username', 'pass', 'scblive'), он показывает: ORA-12154: TNS: не удалось разрешить указанный идентификатор подключения. - person user1631658; 31.08.2012

Я копирую папку ora .... моего предыдущего клиента Oracle 9/8 и все соответствующие dll в определенную папку и помещаю эти две папки в переменную пути. В свое время мне удалось подключиться к Oracle 8.1.7 с помощью oci в php.

person Community    schedule 05.08.2013