Oracle ORA-12154: TNS: не удалось разрешить имя службы Ошибка? - PullRequest
14 голосов
/ 15 октября 2008

Я пользователь SQL Server.

Я работаю над проектом, в котором используется оракул (которым я редко пользуюсь) Мне нужно создать соединение ODBC, чтобы я мог получить доступ к некоторым данным через MS Access У меня есть приложение на моей машине под названием oraHome90. Похоже, что он позволяет настраивать что-то, называемое слушателем, в «утилите настройки сети», я думаю, что «Настройка имени службы локальной сети» также должна быть выполнена. ИТ-поддержка дала мне эту информацию, чтобы установить соединение ODBC. Я перепробовал каждую комбинацию, о которой могу подумать. Я могу пройти тест, который успешно проходит тестирование для «входа» в базу данных сервера Oracle. Когда я пытаюсь создать соединение ODBC, я получаю следующую ошибку: ORA-12154: TNS: не удалось разрешить имя службы.

Предполагая, что я хочу начать с нуля, и предполагается, что следующая информация позволит мне подключиться к базе данных… .. Любые предложения или комментарии? Примечание: в конечном итоге у проекта будет веб-сайт .ASP, запрашивающий данные, но сначала я должен доказать, что могу видеть данные, используя соединение ODBC через MS Access

Service name: SERVICENAME
HOST = HOST.XYZi.com
User Id: MYUSERID
Password: MYPASSWORD
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

'Oracle Connection
Dim ocst
Dim oconn

ocst = "Provider=OraOLEDB.Oracle;" & _ 
        "Data Source=DATASOURCE;" & _ 
        "User ID=CHIJXL;" & _ 
        "Password=password;" 

set oconn = CreateObject("ADODB.Connection")

Ответы [ 21 ]

9 голосов
/ 15 октября 2008

из http://ora -12154.ora-code.com

ORA-12154 : TNS: не удалось разрешить указанный идентификатор подключения
Причина : было запрошено соединение с базой данных или другой службой с использованием идентификатора соединения, и указанный идентификатор соединения не может быть преобразован в дескриптор соединения с использованием одного из настроенных методов именования. Например, если в качестве используемого идентификатора соединения использовалось сетевое имя службы, то сетевое имя службы не может быть найдено в репозитории метода именования, или репозиторий не найден или не доступен.
Действие :

  • Если вы используете локальное именование (файл TNSNAMES.ORA):

  • Убедитесь, что «TNSNAMES» указано в качестве одного из значений параметра NAMES.DIRECTORY_PATH в профиле Oracle Net (SQLNET.ORA)

  • Убедитесь, что файл TNSNAMES.ORA существует, находится в правильном каталоге и доступен.

  • Убедитесь, что сетевое имя службы, используемое в качестве идентификатора соединения, существует в файле TNSNAMES.ORA.

  • Убедитесь, что в файле TNSNAMES.ORA нет синтаксических ошибок. Ищите непревзойденные скобки или случайные символы. Ошибки в файле TNSNAMES.ORA могут сделать его непригодным для использования.

  • Если вы используете имена каталогов:

  • Убедитесь, что «LDAP» указан как одно из значений параметра NAMES.DIRETORY_PATH в профиле Oracle Net (SQLNET.ORA).

  • Убедитесь, что сервер каталогов LDAP работает и что он доступен.

  • Убедитесь, что сетевое имя службы или имя базы данных, используемое в качестве идентификатора соединения, сконфигурировано в каталоге.

  • Проверьте правильность используемого контекста по умолчанию, указав в качестве идентификатора соединения полное имя сетевого сервиса или полное LDAP DN

  • Если вы используете легкое подключение имен:

  • Убедитесь, что "EZCONNECT" указан в качестве одного из значений параметра NAMES.DIRETORY_PATH в профиле Oracle Net (SQLNET.ORA).

  • Убедитесь, что указаны правильные имя хоста, порт и служба.

  • Попробуйте заключить идентификатор соединения в кавычки. Дополнительную информацию о присвоении имен см. В Руководстве администратора Oracle Net Services или в руководстве по конкретной операционной системе Oracle.

5 голосов
/ 16 октября 2008

Исходя из предположения, что вы используете именование TNSNAMES, вот несколько вещей, которые нужно сделать:

  • Создайте / измените файл tnsnames.ora в подкаталоге network / admin, связанном с OraHome90, чтобы включить запись для вашей базы данных oracle:
> SERVICENAME_alias =
>    (DESCRIPTION =
>     (ADDRESS = (PROTOCOL = TCP)(HOST = HOST.XYZi.com)(PORT = 1521))
>     (CONNECT_DATA = (SERVICE_NAME = SERVICENAME))

Предполагается, что вы используете стандартный порт Oracle 1521. Обратите внимание, что servicename_alias может быть любым именем, которое вы хотите использовать в локальной системе. Может также оказаться, что вам нужно указать (SID = SERVICENAME) вместо (SERVICENAME = SERVICENAME).

  • Выполните tnsping servicename_alias для проверки возможности подключения. Получите это работает, прежде чем идти дальше. Это скажет вам, если вы прошли ошибку 12154.
  • При условии хорошего соединения создайте DSN ODBC с помощью панели управления, указав драйвер ODBC для Oracle по вашему выбору (как правило, это драйвер Microsoft ODBC, по крайней мере, и он должен адекватно работать в качестве подтверждения концепции). Я приму имя, которое вы дали для DATASOURCE. Используйте servicename_alias в качестве имени сервера в конфигурации ODBC.
  • На этом этапе вы сможете подключиться к базе данных через Access. Я не программист на VB, но я знаю, что вы должны иметь возможность перейти к File-> Get External Data-> Link Tables и подключиться к вашему источнику ODBC. Я бы предположил, что ваш код будет работать.
4 голосов
/ 29 мая 2013

Что касается # 7 в этом MSDN POST , добавление записи реестра работало для меня. У меня был Vs2010, et oracle 11.0 установлен.

Проверьте ключ реестра «TNS_ADMIN» в HKEY_LOCAL_MACHINE \ SOFTWARE \ ORACLE. Если он существует, убедитесь, что он имеет правильное значение как «Dir: \ app \ product \ 11.1.0 \ client_1 \ network \ admin». Если вы не видите ключ, создайте ключ и установите соответствующее значение как ниже. Regedit-> HKEY_LOCAL_MACHINE-> Software-> Oracle-> RightClick NEW-> StringValue и назовите его TNS_ADMIN и дайте значение «X: \ приложение \ продукт \ 11.1.0 \ client_1 \ сеть \ админ»

3 голосов
/ 21 февраля 2012

Я пытался решить эту проблему в течение нескольких часов, пока не нашел переменную среды с именем TNS_ADMIN, установленную в «Мой компьютер» => «Свойства»> «Дополнительно» => «Переменные среды» => в системных переменных для поиска записи с именем TNS_ADMIN. TNS_ADMIN добавлен для изменения пути по умолчанию для записи Tnsnames.ora. Это полезно, когда используется в сетевой среде, где можно настроить общую запись tnsnames.ora для всех сетевых компьютеров. Чтобы посмотреть путь по умолчанию для tnsnames.ora, добавьте путь по умолчанию в TNS_ADMIN.

2 голосов
/ 11 января 2012

Если в начале * tns имени, определенного в файле tnsnames.ora, есть пробел, то некоторые из соединителей, таких как odbc, могут выдавать эту ошибку. Удалить пробел в начале.

2 голосов
/ 03 апреля 2014

Это не имеет ничего общего с пробелом, встроенным в структуру папок.

У меня была такая же проблема. Но когда я создал переменную среды (определяемую как на уровне системы, так и на уровне пользователя) с именем TNS_HOME и сделал ее указывающей на папку, в которой существует TNSNAMES.ORA, проблема была решена. Voila!

venki

2 голосов
/ 16 октября 2008

@ Уоррен и @DCookie рассмотрели решение, одну вещь, на которую следует обратить внимание, это использование tnsping. Вы можете использовать это для проверки правильности своих TNSNames перед попыткой подключения.

После того, как вы правильно настроили tnsnames, вы можете использовать ODBC или попробовать TOra , который будет использовать ваше собственное соединение оракула. TOra или что-то подобное (TOAD, SQL * Plus и т. Д.) Окажутся неоценимыми для отладки и улучшения вашего SQL.

И последнее, но не менее важное, когда вы в конечном итоге подключаетесь к ASP.net, помните, что вы можете использовать библиотеки подключений к данным Oracle. См. Oracle.com для хоста ресурсов.

1 голос
/ 12 апреля 2011

У меня была та же проблема, и та же самая ошибка обнаруживалась. мой файл TNSNAMES: ORA тоже был в порядке, но, очевидно, возникла проблема из-за брандмауэра, блокирующего доступ Так что хороший совет - убедиться, что брандмауэр не блокирует доступ к источнику данных.

1 голос
/ 15 января 2014

Я тоже столкнулся с этой проблемой. Я обнаружил, что проблема заключается в том, что Oracle DB не нравится пространство в программных файлах C: (x86) \ Toad ......, поэтому я создал новый каталог с именем C: App \ Toad, а затем переустановил его, чтобы подключить Toad к Oracle , Это сработало.

1 голос
/ 25 июня 2018

Я решил эту проблему, удалив sqlnet.ora из пути C: \ oracle \ ora92 \ network \ ADMIN

  • Убедитесь, что файл TNSNAMES.ORA существует в правильном каталоге
  • Убедитесь, что в переменной среды PATH есть запись для oracle
  • Убедитесь, что в TNSNAMES.ORA нет проблем с синтаксисом.
  • Попробуйте удалить файл sqlnet.ora
...