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)
Любые идеи, почему мое веб-приложение не видит строку подключения? (в то время как консольное приложение)
Не уверен, что еще я могу сделать.
Ответы
Ответ 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, который дал мне метод (подробно описанный выше) для этого.