source

ODA-12154 ODP.NET을 사용하여 연결을 시도하는 중 오류 발생

goodcode 2023. 8. 24. 22:49
반응형

ODA-12154 ODP.NET을 사용하여 연결을 시도하는 중 오류 발생

ODA-12154 ODP.NET을 사용하여 연결을 시도하는 중 오류 발생

최신 정보: Wernfried의 답변으로 해결되었습니다.

환경 변수 TNS_ADM 생성IN=D:\oracle\product\12.1.0\dbhome_1\network\admin

Sqlplus는 레지스트리에서 TNS_ADMIN을 읽지만 ODP를 읽습니다.NET 관리 드라이버가 레지스트리를 읽지 않습니다.참고 항목:중국어 문자를 "?"로 반환하는 Odbc 연결

환경 변수가 다음과 같이 설정되어 있는지 확인할 수 있습니다.

string tns_admin = Environment.GetEnvironmentVariable("TNS_ADMIN")

나는 그가 제안한 링크가 어떻게 관련이 있는지 잘 이해하지 못했습니다.

원래 질문:

ODA-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.ora:

# tnsnames.ora Network Configuration File: D:\oracle\product\12.1.0\dbhome_1\network\admin\tnsnames.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:\Users\Derek.Morin\Documents\Visual Studio 2010\Projects\ScriptCode\Oracle>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

Wernfried의 논평이 저를 위해 그것을 고쳤습니다.그가 답으로 그것을 게시하기 위해 돌아오지 않았기 때문에 - 저는 그의 댓글로 이것을 끝낼 것입니다.

환경 변수 생성

TNS_ADMIN=D:\oracle\product\12.1.0\dbhome_1\network\admin

sqlplus는 레지스트리에서 TNS_ADMIN을 읽지만 ODP를 읽습니다.NET 관리 드라이버가 레지스트리를 읽지 않습니다.참고 항목: stackoverflow.com/questions/28280883/ … – Wernfried Domscheit '15년 12월 10일 16:24

나는 제프의 의견에 찬성합니다.저는 며칠 동안 이것을 알아내려고 노력했고, 그것이 핵심이었습니다.나는 현존하는 모든 것을 조사했습니다.tnsnames.ora문제의 서버에 있는 파일, 없는 파일의 이름을 모두 변경했습니다.%ORACLE_HOME/network/admin그리고 모든 것이 막 작동하기 시작했습니다!

최근에 32비트 Oracle 드라이버를 제거하고 64비트 드라이버를 다시 설치했습니다.짧은 기간 동안, 유일한.tnsnames.orafile is sample file (sample subdirectory에 있는)아마도 나쁜 링크(등록부에 있어야만 했던, 나는 그것을 가지고 있었습니다.TNS_ADMIN환경 변수)가 그 시점에서 위조되었습니까?확실하지는 않지만 변수가 일부 사람들에게 도움이 되는 것처럼 보이지만 이 문제와 관련하여 물이 매우 탁할 수 있습니다.

참고: 저는 ODP를 사용하는 SSRS 프로젝트에서 이 문제를 겪었습니다.네트와 나의 경우 ODP.Net이 기본 TNS를 "C:"로 설정했습니다.\Program Files(x86)\Oracle Developer Tools for VS2015\network\admin"(다른 용도의 TNS_ADMIN 환경 변수가 있음에도 불구하고).저는 그 디렉토리로 가서 샘플 tnsnames.ora와 sqlnet.ora 파일의 이름을 다른 이름(예: junk-tnsnames.ora)으로 바꿨습니다.미쳤어요!이것이 다른 누군가에게 도움이 되기를 바랍니다.

언급URL : https://stackoverflow.com/questions/34206659/ora-12154-error-trying-to-connect-using-odp-net

반응형