Ошибка oracle 12154 tns невозможно разрешить заданный идентификатор соединения

Обновлено: 01.07.2024

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

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

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.

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

  • Создайте / измените файл tnsnames.ora в подкаталоге network / admin, связанный с OraHome90, чтобы включить запись для вашей базы данных оракула:

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

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

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

Я изо всех сил пытался решить эту проблему часами, пока не нашел переменную среды под названием TNS_ADMIN, установленную в My Computer => Properties => Advanced => Environment Variables => посмотреть в системных переменных для записи под названием TNS_ADMIN. TNS_ADMIN добавляется для изменения пути по умолчанию для записи Tnsnames.ora. Это полезно, когда оно используется в сетевой среде, где можно установить общую запись tnsnames.ora для всех сетевых компьютеров. Чтобы посмотреть путь по умолчанию tnsnames.ora, добавьте путь по умолчанию в TNS_ADMIN.

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

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

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

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

Я даже переустановил VS, чтобы убедиться, что он находится в C: \ Program Files, а не в C: \ Program Files (x86)

Есть идеи, почему мое веб-приложение не видит строку подключения? (в то время как консольное приложение делает) Не уверен, что еще я могу сделать.

Я предполагаю, что вы используете файл tnsnames.ora для указания доступных служб баз данных. В этом случае ошибки подключения обычно сводятся к двум причинам.

Приложению не удалось найти запись TNS, указанную вами в строке подключения.

Запись TNS была найдена, но IP-адрес или хост неверен в файле tnsnames.ora.

Разберемся с номером 1 (я думаю, это ваша проблема). Когда вы говорите Oracle подключиться, используя что-то вроде:

] $ sqlplus sodonnel /sodonnel @ nowhere

Так что вам нужно проверить несколько вещей:

  1. Есть ли файл tnsnames.ora - я думаю, что да, потому что ваша консоль может подключиться
  2. Есть ли в файле запись для службы - я думаю, что да, когда консоль подключается
  3. Может ли приложение найти tnsnames.ora?

Ваша проблема может быть номер 3 - приложение запускается от имени другого пользователя, чем при запуске консоли?

Oracle ищет файл tnsnames.ora в каталоге, определенном в переменной среды TNS_ADMIN. Если вы работаете как разные пользователи, возможно, переменная среды TNS_ADMIN не задана, и поэтому не может найти файл?

У меня была такая же проблема. В моем случае я использовал веб-сервис, который был построен с использованием настроек AnyCPU. Так как WCF использовал 32-битные компоненты доступа к данным Oracle, он вызывал ту же ошибку, когда пытался вызвать его из консольного клиента. Поэтому, когда я скомпилировал службу WCF с использованием настройки на основе x86, клиент смог успешно получать данные из веб-службы.

Если вы скомпилируете как «Любой ЦП» и запустите на платформе x64, вы не сможете загрузить 32-битные библиотеки DLL (которые в нашем случае были компонентами Oracle Data Access), потому что наше приложение не запущен в WOW64 (Windows32 в Windows 64). Поэтому, чтобы разрешить 32-битную зависимость компонентов Oracle Data Access, я компилирую веб-сервис с целью Platform x86, и это решило его для меня

В качестве альтернативы, если на компьютере установлены 64-битные драйверы ODAC, это также привело к устранению проблемы.

Пожалуйста, позвольте мне повторить то, что сказал Стивен, так как я пропустил это в первый раз сам. Переменная окружения TNS_ADMIN и ORACLE_HOME установлены в C:\instantclient_11_ 2 и файл th tnsnames.ora находится в там. Нашел ответ по этой ссылке .

Если вы используете LDAP, убедитесь, что переменная среды "TNS_ADMIN" существует и указывает на папку, содержащую файл "ldap.ora".

Если эта переменная не существует, создайте ее и перезапустите Visual Studio.

Была похожая проблема, только мое веб-приложение работало нормально, и именно SQLPlus вызывал проблемы с подключением, а также ошибка ORA-12154 could not resolve the connect identifier specified , У меня было установлено 11g и 12 клиентов Oracle. Все мои переменные окружения были установлены так, чтобы они указывали на мой экземпляр 12 :

  • ORACLE_HOME = C:\oracle\product\12
  • PATH = C:\oracle\product\12\bin;.
  • TNS_ADMIN = C:\oracle\product\12\network\admin

В HKLM\Software\Oracle\KEY_OraClient12Home1 также требуется запись в реестре, строковая запись в TNS_ADMIN с тем же путем, что и переменная среды.

У меня есть tnsnames.ora как в C:\oracle\product\11\network\admin , так и в C:\oracle\product\12\network\admin . Насколько я знаю, и мое веб-приложение, и используемый мной клиент SQLPlus 12 должны были использовать все 12 переменные версии.

Мои шаги по устранению неполадок:

  • Измените все переменные среды, указанные выше, с 12 на 11 .
  • Подключитесь к SQL Server 11g (работает!)
  • Измените все переменные среды выше с 11 на 12
  • Подключитесь к 12-му SQLPlus снова (сработало!)

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

используйте монитор процесса и найдите журнал «имя не найдено» для файла tnsnames.ora.

проверьте переменные среды. если не действителен, тогда удалите все клиенты oracle и переустановите.

У меня была эта ошибка в Visual Studio 2013 с проектом SSIS. Я установил Project, Properties, Debugging, Run64BitRuntime = false и затем запустился пакет служб SSIS. Однако, когда я развернул пакет на сервере, мне пришлось установить значение true (Сервер - 64-битная Windows 2012 /Sql 2014).

Я думаю, что причина этого в том, что Visual Studio является 32-битным приложением.

Это старый вопрос, но последние установщики Oracle не улучшаются, поэтому я недавно оказался в этом болоте, бродя в течение нескольких дней .

Моим сценарием был SQL Server 2016 RTM. 32-битный Oracle 12c Open Client + ODAC в конечном итоге работал нормально для дизайнера отчетов Visual Studio и дизайнера служб Integration Services, а также пакетов SSIS, запускаемых через агент SQL Server (с 32-битной опцией). При определении и тестировании источника данных 64-разрядная система работала нормально для портала отчетов, но при запуске отчетов всегда возникала страшная ошибка «ORA-12154».

Мое окончательное решение состояло в том, чтобы переключиться на строку соединения EZCONNECT - это полностью исключает путаницу TNSNAMES. Вот ссылка на подробное описание, но в основном это просто: host: port /sid

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

Установите драйверы Oracle: клиент Oracle 12c (32-разрядный) плюс ODAC.

б. Запустите winnt_12102_client32 \ client32 \ setup.exe. Для Типа установки выберите Admin. В качестве места установки введите C: \ Oracle \ Oracle12. Примите другие значения по умолчанию.

с. Запустите командную строку «Как администратор» и перейдите в каталог (cd) в папку ODAC112040Xcopy_32bit.

д. Введите команду: install.bat all C: \ Oracle \ Oracle12 odac

е. Скопируйте файл tnsnames.ora с другого компьютера в следующие папки: *

я. C: \ Oracle \ Oracle12 \ network \ admin *

II. C: \ Oracle \ Oracle12 \ product \ 12.1.0 \ client_1 \ network \ admin *

Установите клиент Oracle 12c (x64) плюс ODAC

б. Запустите winx64_12102_client \ client \ setup.exe. Для Типа установки выберите Admin. В качестве места установки введите C: \ Oracle \ Oracle12_x64. Примите другие значения по умолчанию.

с. Запустите командную строку «Как администратор» и измените каталог (cd) на папку C: \ Software \ Oracle Client \ ODAC121024Xcopy_x64.

д. Введите команду: install.bat all C: \ Oracle \ Oracle12_x64 odac

е. Скопируйте файл tnsnames.ora с другого компьютера в следующие папки: *

я. C: \ Oracle \ Oracle12_x64 \ network \ admin *

II. C: \ Oracle \ Oracle12_x64 \ product \ 12.1.0 \ client_1 \ network \ admin *

* Если вы используете метод EZCONNECT, эти шаги не требуются.

Установка ODAC сложна и неясна - спасибо Дэну Инглишу, который дал мне метод (подробно описанный выше) для этого.

Эта ошибка (а также ORA-6413: Соединение не открыто) также может быть вызвана круглыми скобками в пути к исполняемому файлу приложения и ошибкой в ​​клиентских библиотеках 10.2.0.1 или ниже.

Вам следует либо обновить клиентскую библиотеку oracle, либо изменить путь к исполняемому файлу.

Используйте эту ссылку .on Support Microsoft

Я дал разрешение пользователю IUSR_MachineName на домашнюю папку oracle и смог решить проблему

Мне нужно использовать PLSQL Developer для доступа к базам данных Oracle. При попытке подключения к моей базе данных появляется следующая ошибка. ORA-12154: TNS:could not resolve the connect identifier specified. Я могу использовать SQLPLUS из командной строки для подключения к базе данных, а tnsping возвращается успешно, но я не могу понять, почему PLSQL Developer не будет работать - он использует правильную tnsnames.ora , и строка подключения там правильная, потому что она используется тем же, что используется tnsping.

tnsnames.ora

Предпочтения для подключения к PLSQL: здесь

Ответ заключался в простое перемещение папки разработчика PLSQL из "Program Files (x86) в папку" Program Files "- weird!

Эта ошибка очень распространена, часто самая первая, с которой вы пытаетесь установить соединение с вашей базой данных.
Я предлагаю эти 6 шагов для исправления ORA-12154:

    Проверить имя экземпляра правильно введено в tnsnames.ora.
    В конце имени экземпляра или базы данных не должно быть никаких управляющих символов.
    Вся паранезия вокруг записи TNS должна быть надлежащим образом завершена.
    Запись имени домена в sqlnet.ora не должна противоречить полному имени базы данных.
    Если проблема все еще сохраняется, попробуйте воссоздать запись TNS в tnsnames.ora.
    Наконец, вы можете добавлять новые записи с помощью утилиты конфигурации SQL * Net Easy.
ответил(а) 2013-02-17T19:13:00+04:00 8 лет, 9 месяцев назад

скопировать пасту pl sql developer в файлы программ x86 и файлы программ. если клиент установлен в другой раздел/диск, тогда скопируйте pl sql-разработчик на этот диск. и запускаться из папки разработчиков pl sql вместо ярлыка на рабочем столе.

окончательное решение! Холод

ответил(а) 2017-02-28T11:38:00+03:00 4 года, 8 месяцев назад

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

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


Поданный в Oracle, указывает ошибку 3807408.

У меня была та же проблема с VM, на которой работали CentOS7 и Oracle 11GR2, доступные из Windows 7, решение было странным, на моей локальной машине tnsnames, указывающие на БД, имели место перед именем службы, я просто удалил пространство и затем я смог подключиться.

[это пустое пространство] XE = (ОПИСАНИЕ = (ADDRESS = (PROTOCOL = TCP) (HOST = 127.0.0.1) (PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE) ) )

EXTPROC_CONNECTION_DATA = (ОПИСАНИЕ = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC) (KEY = EXTPROC_FOR_XE)) ) (CONNECT_DATA = (SID = PLSExtProc) (ПРЕЗЕНТАЦИЯ = РО) ) )

XE = (ОПИСАНИЕ = (ADDRESS = (PROTOCOL = TCP) (HOST = 127.0.0.1) (PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE) ) )

EXTPROC_CONNECTION_DATA = (ОПИСАНИЕ = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC) (KEY = EXTPROC_FOR_XE)) ) (CONNECT_DATA = (SID = PLSExtProc) (ПРЕЗЕНТАЦИЯ = РО) ) )

ответил(а) 2017-04-07T17:20:00+03:00 4 года, 7 месяцев назад

JUST копировать и вставлять tnsnames и файлы sqlnet из дома Oracle в основной папке разработчика PLSQL.
Используйте ниже запрос, чтобы получить оракул домой

выберите substr (file_spec, 1, instr (file_spec, '\', -1, 2) -1) ORACLE_HOME из dba_libraries где library_name = 'DBMS_SUMADV_LIB';

У меня была проблема на работе. Сервер oracle был "исправлен", и одна из баз данных, которые я использую, не могла быть подключена через запись TNSNames, но через базовое соединение. База данных была установлена, и администратор мог видеть, что она была запущена.

Кроме того, любое приложение, использующее TNS для подключения к базе данных, также не работает.

Проблема заключалась в том, что имя базы данных было неверно в файле TNS, но по какой-то причине оно работало годами. Исправление имени закрепило его для нас. Я обнаружил, что Oracle SQL Developer продолжал использовать старую запись TNS даже после того, как я ее обновил, и я не хочу переустанавливать ее только для одного подключения к базе данных. Похоже, что когда база данных была создана, ей было дано меньшее имя, а затем другие и через какое-то действие вырезать и вставить в файл TNSNames, он был запутан. Никто не уверен, как это сработало, поскольку мы изучаем его, но патч оракула гарантировал, что имя должно быть правильным.

что делает команда

изменить: Мне кажется, что имя экземпляра базы данных на самом деле не "orcl"? Вывод служб lsnrctl говорит мне, что служба "orcl", хотя и определена в прослушивателе.Ora файл, на самом деле не работает.

можете ли вы войти в систему с прямым подключением на сервере? Если да, то что вы используете в качестве Oracle_sid, вам нужно будет значение переменной окружения? Войдите в систему как пользователь SYS и введите команду:

ИЗМЕНИТЬ СИСТЕМНЫЙ РЕГИСТР;

затем снова выполните команду lsnrctl services и посмотрите, не появится ли дополнительный экземпляр.

кроме того, как указывает Алекс, команда tnsping сообщает полное имя службы. Редактирование заменить sqlnet.Ora файл и установить имена.Значение DEFAULT_DOMAIN равно NULL, если оно имеет значение.

редактировать 2: делает tnsping ud06 на сервер работы? Или мое предположение, что клиент и сервер находятся в разных системах неправильно?

ответ на эту проблему очень прост. Не беспокойтесь об этом .файлы ora или любая другая конфигурация. Oracle делает все это просто идеально.

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

поэтому при подключении через SQL командной строки Не используйте пароль с " @ " в нем. Просто используйте веб-интерфейс для создания учетной записи, имеющей пароль без символа " @ " в он.

вот!! Проблема решена. Я ломал голову в течение нескольких дней, и теперь моя проблема решена!!

на SERVICE_NAME на tnsping вывод не соответствует записи в tnsnames.ora ; это файл из окна Windows или окна Linux? Похоже, у вас нет локального (Windows) tnsnames.ora запись u06 и он угадывает, что имя службы должно расширять его - я думаю, что это то, что означает ссылка на адаптер имени хоста.

Я также сталкиваюсь с ORA-12154:TNS: не удалось разрешить указанный идентификатор подключения, и добавление пользователя, пытающегося подключиться к группе oinstall oracle, исправило его.

сначала попробуйте запустить экземпляр oracle:

Пуск - > Панель конфигурации - > Администрирование - >Службы - >ORACLESERVICEORCL (кстати, мой экземпляр) - >пуск

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

Add connection image

Я также столкнулся с той же ошибкой, попробуйте этот код:

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

я исправила эту проблему, используя эти шаги.

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

  1. войдите в windows в качестве администратора.
  2. перейти к Панели Управления.
  3. Свойства системы и нажмите Enviroment

найдите переменную ОС и измените имя как "TNS_ADMIN"

enter image description here

enter image description here

и измените значение как " адрес каталога tnsnames"

Читайте также: