Ошибка ORA-12154 при попытке подключения с помощью ODP.NET
ORA-12154 ошибка при попытке подключения с помощью ODP .NET
UPDATE: ответ Вернфрида исправил это для меня.
создать переменную среды TNS_ADMIN=D:oracleproduct12.1.0dbhome_1networkadmin
Sqlplus читает TNS_ADMIN из реестра, но ODP.NET управляемый драйвер не читать реестр. Смотреть также: OdbcConnection возвращает китайские иероглифы как "?"
вы можете проверить что переменная окружения задается:
string tns_admin = Environment.GetEnvironmentVariable("TNS_ADMIN")
Я не совсем понял, как ссылка, которую он предложил, была актуальной.
исходный вопрос:
ORA-12154 ошибка при попытке подключения с помощью ODP .NET
код:
OracleConnection oracleConnection = new OracleConnection();
string connectionString = "User Id=redacted;Password=redacted;Data Source=db6";
oracleConnection.ConnectionString = connectionString;
oracleConnection.Open();
ошибки:
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Oracle.ManagedDataAccess.Client.OracleException: ORA-12154: TNS:could not resolve the connect identifier specified ---> OracleInternal.Network.NetworkException: ORA-12154: TNS:could not resolve the connect identifier specified
at OracleInternal.Network.AddressResolution..ctor(String TNSAlias, String instanceName)
at OracleInternal.Network.OracleCommunication.DoConnect(String tnsDescriptor)
at OracleInternal.Network.OracleCommunication.Connect(String
мои tnsnames.Ора:
# tnsnames.ora Network Configuration File: D:oracleproduct.1.0dbhome_1networkadmintnsnames.ora
# Generated by Oracle configuration tools.
DB6 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = redacted.redacted.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = db6)
)
)
LISTENER_DB6 =
(ADDRESS = (PROTOCOL = TCP)(HOST = redacted.redacted.com)(PORT = 1521))
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
подключение с sql-plus:
C:UsersDerek.MorinDocumentsVisual Studio 2010ProjectsScriptCodeOracle>sqlplus redacted/redacted@localhost/db6
SQL*Plus: Release 12.1.0.1.0 Production on Thu Dec 10 09:10:14 2015
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Last Successful login time: Tue Sep 22 2015 09:41:19 -05:00
Connected to:
Oracle Database 12c Release 12.1.0.1.0 - 64bit Production
3 ответов
комментарий Вернфрида исправил это для меня. Поскольку он не вернулся, чтобы опубликовать его в качестве ответа - я закрою это своим комментарием.
создать переменную среды
TNS_ADMIN=D:\oracle\product.1.0\dbhome_1\network\admin
sqlplus читает TNS_ADMIN из реестра, но ODP.NET управляемый драйвер не читает реестр. См. также stackoverflow.com/questions/28280883 / ... – Вернфрид Домшайт 10 '15 декабря в 16: 24
Я поддерживаю замечание Джеффа. Я пытался понять это в течение нескольких дней, и это было ключом. Я сделал поиск по всем сохранившимся tnsnames.ora
файлы на сервере, о котором идет речь, переименовали все, что не было в %ORACLE_HOME/network/admin
, и все только начало работать!
недавно я удалил 32-битные драйверы Oracle и переустановил 64-битные драйверы... за короткий промежуток времени единственное tnsnames.ora
file был образцом файла (в подкаталоге sample)... возможно, плохая связь (который должен был быть в реестре, у меня было это TNS_ADMIN
переменная окружения все время) была подделана в этот момент? Не уверен, но хотя переменная, похоже, помогает некоторым людям, вода может быть очень мутной в отношении этой проблемы.
Примечание: у меня была эта проблема в проекте SSRS, используя ODP.Net и в моем случае ODP.Net по умолчанию мой TNS "C:\Program Files (x86)\Oracle Developer Tools for VS2015\network\admin" (несмотря на то, что у меня была переменная среды TNS_ADMIN, которая была для чего-то другого. Я вошел в этот каталог и переименовал образцы tnsnames.ora и sqlnet.ora файлы на что-то другое (т. е. junk-tnsnames.Ора) он начал работать. Сумасшедший! Надеюсь, это поможет кому-то еще.