ORA-12154 не удалось разрешить указанный идентификатор подключения - PullRequest
17 голосов
/ 31 октября 2011

Я переключился на 64-битную Windows 7 и создал простое веб-приложение для проверки соединения с базой данных. Я использую VS 2010 - простой веб-проект asp.net и запускаю приложение из VS.

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

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

После некоторого поиска в Google, я обнаружил, что многие посты в сети ссылаются на разрешения, поэтому я установил разрешения C: / Oracle на чтение / запись / выполнение для моей учетной записи ASP.net, NETWORK SERVICE, ИМЯ КОМПЬЮТЕРА. Это все еще не решит проблему. Я проверил, что мое веб-приложение работает под моей учетной записью домен \ имя пользователя и что эта учетная запись имеет права на чтение / запись / выполнение в папке C: \ Oracle.

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

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

Ответы [ 13 ]

16 голосов
/ 01 ноября 2011

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

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

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

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

sqlplus user/pass@service

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

[sodonnel @ home ~] $ sqlplus sodonnel / sodonnel @ nowhere

SQL*Plus: Release 11.2.0.1.0 Production on Mon Oct 31 21:42:15 2011

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified

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

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

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

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

4 голосов
/ 24 августа 2012

Может быть так много проблем, но если вы используете oracle 10g, удалите oracle 10g, а также удалите значение из реестра и установите oracle 11g.Но если вы используете оракул 11g, сначала зайдите и проверьте реестр, если он указывает на правильный дом.Иногда может быть несколько домов, потому что вы снова и снова устанавливаете sql developer.В этом случае вы можете удалить ненужное значение домашнего реестра или добавить файл tns и sql.net ко всем этим домашним каталогам, что может решить проблему.Я решил свой таким образом.

3 голосов
/ 02 октября 2013

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

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

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

2 голосов
/ 28 марта 2018

У меня есть веб-приложение Entity Framework, которое работает на моем локальном компьютере, но эта ошибка появляется при отправке в другую среду.Существуют другие приложения не Entity Framework, которые работают, и я могу подключиться с помощью sqlplus.

Использование sysinternals Process Monitor показывает, что файл имен tns загружается некорректно:

tnsnames.ora status NAME NOT FOUND

Следуя документации Я попытался добавить раздел с указанием расположения файла tnsnames следующим образом:

<configuration>

  <configSections>
    <section name="oracle.manageddataaccess.client"
      type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
  </configSections>

  <oracle.manageddataaccess.client>
    <version number="*">
      <settings>
        <setting name="TNS_ADMIN" value="C:\Oracle\product\12.1.0\client_1\Network\Admin"/>
      </settings>
    </version>
  </oracle.manageddataaccess.client>

<configuration>

Однако это привело к немедленной ошибке 500 сервера.

Дальнейшие исследования показали, что dll, которую я упаковывал вместе с веб-приложением, была версия 4.122.1.0, в то время как клиентская среда Oracle, установленная на машине, была 4.121.2.0.Как объяснено в документации по пакету Oracle EntityFramework

Примечание. Если ваше приложение является веб-приложением и вышеуказанная запись была добавлена ​​в файл web.config и тот же обработчик раздела конфигурации для«oracle.manageddataaccess.client» также существует в machine.config, но значения атрибута «Version» отличаются, появляется сообщение об ошибке «Определен дубликат раздела« oracle.manageddataaccess.client »».может наблюдаться во время выполнения.Если это так, запись обработчика раздела config в machine.config для «oracle.manageddataaccess.client» должна быть удалена из machine.config, чтобы веб-приложение не сталкивалось с этой ошибкой.Но, учитывая, что на компьютере могут присутствовать другие приложения, которые зависели от этой записи в machine.config, возможно, потребуется перенести эту запись обработчика раздела конфигурации во все файлы конфигурации приложения .NET на этом компьютере, которые зависят от него.

Я попытался добавить отдельный раздел версии в .NET machine.config безуспешно (существовал раздел для версии 4.121.2.0, и я добавил раздел для версии 4.122.1.0).После того, как я удалил раздел «oracle.manageddataaccess.client» из machine.config, указанное выше добавление к web.config разрешило ORA-12154.

Сводка решения 1:

  1. Удалите «oracle.manageddataaccess.client» из .NET machine.config
  2. Задайте параметр конфигурации TNS_ADMIN в web.config, как указано выше

Решение 2

При исследовании этой проблемы я обнаружил, что переменная среды TNS_ADMIN не была установлена.Я создал новую переменную среды с именем TNS_ADMIN и установил значение «C: \ Oracle \ product \ 12.1.0 \ client_1 \ Network \ Admin».Я удалил изменения web.config и удалил раздел «oracle.manageddataaccess.client» из .NET machine.config, но все еще получил ORA-12154.Только после перезапуска машины это решило проблему.

Сводка решения № 2:

  1. Создайте новую переменную среды с именем TNS_ADMIN и установите значение «C: \ Oracle \ product \ 12.1.0 \ client_1 \ Network \ Admin»
  2. Перезагрузите компьютер

Решение 3

Я добавил запись для правильной версии в реестр, и это решило проблему:

HKLM\Software\Wow6432Node\Oracle\ODP.NET.Managed\4.121.2.0  

Имя ключа TNS_ADMIN, и это указывает на папку, содержащую файл tnsnames:

C:\Oracle\product\12.1.0\client_1\network 

Не папка C:\Oracle\product\12.1.0\client_1\network\admin.

1 голос
/ 13 февраля 2019

Еще один неприятный тип ошибки, с которым я столкнулся в Oracle 11: записи в tnsnames.ora, которые не начинаются с первого столбца строки ('XXX = (...)' вместо 'XXX = (.. .) ') и анализируются вместе с предыдущей записью, что делает ее искаженной.

Подобно замененным или неуместным файлам tnsnames.ora, этот тип проблемы легко диагностируется с помощью утилиты командной строки tnsping: вы передаете ей имя записи tnsnames.ora, и она дает полный текст ее определения. ,

1 голос
/ 22 июня 2016

Была похожая проблема, только мое веб-приложение работало нормально, и именно 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 прекратить соединение, но этот вид сброса может работать для кого-то, так что я решил документировать это здесь.

1 голос
/ 22 октября 2012

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

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

1 голос
/ 27 сентября 2012

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

0 голосов
/ 11 ноября 2016

Это старый вопрос, но последние установщики 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

http://www.oracledistilled.com/oracle-database/oracle-net/using-easy-connect-ezconnect-naming-method-to-connect-to-oracle-databases/

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

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

a.Загрузите и разархивируйте следующие файлы из http://www.oracle.com/technetwork/database/enterprise-edition/downloads/database12c-win64-download-2297732.html и http://www.oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html):

i.winnt_12102_client32.zip

ii.ODAC112040Xcopy_32bit.zip

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

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

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

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

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

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

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

a.Загрузите и распакуйте следующие файлы из http://www.oracle.com/technetwork/database/enterprise-edition/downloads/database12c-win64-download-2297732.html и http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html):

i.winx64_12102_client.zip

ii.ODAC121024Xcopy_x64.zip

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

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

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

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

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

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

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

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

0 голосов
/ 10 апреля 2015

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

Я думаю, что причина в том, что Visual Studio 32-битнаяприменение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...