Подтвердить что ты не робот

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

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

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

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

После того, как я перешел к нему, я обнаружил, что много сообщений в Интернете ссылаются на разрешения, поэтому я устанавливаю свои разрешения C:/Oracle для чтения/записи/выполнения для моей учетной записи ASP.net, NETWORK SERVICE, COMPUTER NAME. Это еще не решит проблему. Я проверил, что мое веб-приложение работает под учетной записью домена \username и что эта учетная запись имеет права на чтение/запись/выполнение в папку C:\Oracle.

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

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

4b9b3361

Ответ 1

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

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

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

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

sqlplus user/[email protected]

Служба определена в файле 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

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

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

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

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

Имел аналогичную проблему, только мое веб-приложение было в порядке, и именно SQLPlus давал мне проблемы с подключением и ошибкой ORA-12154 could not resolve the connect identifier specified. У меня было 11 г и 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 до 11.
  • Соединение с 11g SQLPlus (сработало!)
  • Измените все переменные среды выше от 11 до 12.
  • снова подключиться к 12 SQLPlus (сработает!)

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

Ответ 7

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

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

Ответ 8

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

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

Ответ 9

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

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

Дополнительная информация:

Ответ 10

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

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

Ответ 11

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

Мой сценарий - RTM от SQL Server 2016. 32-разрядный Oracle 12c Open Client + ODAC в конечном итоге отлично работал для дизайнера конструктора отчетов и дизайнеров Visual Studio, а также пакетов 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.

а. Загрузите и распакуйте следующие файлы из 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):

я. winnt_12102_client32.zip

II. ODAC112040Xcopy_32bit.zip

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

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

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

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

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

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

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

а. Загрузите и распакуйте следующие файлы из 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):

я. winx64_12102_client.zip

II. ODAC121024Xcopy_x64.zip

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

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

д. Введите команду: install.bat все 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 сложна и неясна - благодаря Dan English, который дал мне метод (подробно описанный выше) для этого.