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