programing

ORA-12154가 지정된 연결 식별자를 확인할 수 없습니다.

minimums 2023. 3. 9. 21:55
반응형

ORA-12154가 지정된 연결 식별자를 확인할 수 없습니다.

64비트 Windows 7로 전환하여 데이터베이스 연결을 테스트하기 위한 간단한 웹 앱을 만들었습니다.VS 2010 플레인 asp.net 웹 프로젝트를 사용하고 있으며 VS 내에서 애플리케이션을 실행하고 있습니다.

"ORA-12154가 지정된 연결 식별자를 해결할 수 없습니다"라는 오류가 나타납니다.

데이터베이스 접속을 테스트하는 샘플콘솔 어플리케이션도 있는데 정상적으로 동작합니다.

검색한 결과, 온라인에 많은 게시물이 권한을 참조하고 있는 것을 발견했기 때문에 ASP.net 계정, NETWORK SERVICE, COMPUTER NAME에 대해 C:/Oracle 권한을 읽기/쓰기/삭제하도록 설정했습니다.이렇게 해도 문제는 해결되지 않습니다.내 웹 앱이 내 도메인\사용자 이름 계정으로 실행되고 이 계정이 C에 대한 읽기/쓰기/실행 권한이 있는지 확인했습니다.\Oracle 폴더.

VS가 C:\Program Files(x86)가 아닌 C:\Program Files(\Program Files(x86)에 있는지 확인하기 위해 다시 설치했습니다.

내 웹 앱이 연결 문자열을 인식하지 못하는 이유에 대해 알고 계십니까?(콘솔 앱에서는 가능하지만) 그 밖에 무엇을 할 수 있을지 모르겠습니다.

사용 가능한 데이터베이스 서비스를 지정하기 위해 tnsnames.ora 파일을 사용하고 있다고 가정합니다.이 경우 접속 오류는 보통 2가지로 귀결됩니다.

  1. 접속 문자열에서 지정한TNS 엔트리를 찾을 수 없습니다.

  2. TNS 엔트리는 발견되었지만 tnsnames.ora 파일에서 IP 또는 호스트가 올바르지 않습니다.

1번으로 확대하는 것(당신의 문제라고 생각합니다.Oracle에 다음과 같은 방법으로 연결하도록 지시하는 경우:

sqlplus user/pass@service

서비스는 tnsnames.ora 파일에 정의되어 있습니다.tnsnames.ora에 정의되어 있지 않은 서비스에 접속하려고 하면 다음과 같은 오류가 나타납니다.

[ sqlplus sodonnel @home ~ ]$ sqlplus sodonnel / schronnel @html

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

따라서 몇 가지 사항을 확인해야 합니다.

  1. tnsnames.ora 파일이 있습니까?콘솔이 접속할 수 있기 때문에 있다고 생각합니다.
  2. 파일에 서비스 엔트리가 있습니까?콘솔이 연결되면 저도 그렇다고 생각합니다.
  3. 응용 프로그램이 tnsnames.ora를 찾을 수 있습니까?

문제는 3번일 수 있습니다.어플리케이션은 콘솔을 실행할 때와 다른 사용자로 실행됩니까?

Oracle은 TNS_ADMIN 환경변수로 정의된 디렉토리에서 tnsnames.ora 파일을 찾습니다.다른 사용자로 실행 중인 경우 TNS_ADMIN 환경변수가 설정되지 않아 파일을 찾을 수 없습니다.

문제가 웹 앱만 였습니다.ORA-12154 could not resolve the connect identifier specified오라클 11g 12g 오라클는 모두 의 환경변수를 되어 있었다.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.가 .C:\oracle\product\11\network\admin ★★★★★★★★★★★★★★★★★」C:\oracle\product\12\network\admin제 웹 의 SQLPlus SQLPlus 12개의 것을 사용하고 있던 있습니다12버전 변수입니다.

트러블 슈팅 순서:

  • 를 에서 변경합니다.12로로 합니다.11.
  • 11g의 SQL Plus로 연결(작동 가능)
  • 를 모두 바꾸다11로로 합니다.12.
  • 12의 SQL Plus로 다시 연결(작업 완료)

12의 SQLPlus가 접속을 정지한 원인은 알 수 없지만, 이러한 리셋은 다른 사람에게도 유효할 수 있기 때문에 여기에 기재해 두도록 하겠습니다.

로컬 시스템에서 작동하는 엔티티 프레임워크 웹 애플리케이션이 있지만 다른 환경으로 푸시하면 이 오류가 표시됩니다.엔티티 프레임워크 이외의 다른 응용 프로그램이 작동하며 sqlplus와 연결할 수 있습니다.

sysinternals 프로세스 모니터를 사용하면 tns 이름 파일이 올바르게 로드되지 않음을 알 수 있습니다.

tnsnames.ora 상태 이름을 찾을 수 없습니다.

설명서에 따라 다음과 같이 tnsnames 파일의 위치를 나타내는 섹션을 추가하려고 했습니다.

<configuration>

  <configSections>
    <section name="oracle.manageddataaccess.client"
      type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
  </configSections>
  
  <oracle.manageddataaccess.client>
    <version number="*">
      <settings>
        <setting name="TNS_ADMIN" value="C:\Oracle\product\12.1.0\client_1\Network\Admin"/>
      </settings>
    </version>
  </oracle.manageddataaccess.client>
  
<configuration>

그러나 이로 인해 즉시 500개의 서버 오류가 발생했습니다.

상세 조사 결과, 웹 어플리케이션과 함께 패키징한 dll은 버전 4.122.1.0, 머신에 설치된 Oracle 클라이언트 환경은 4.121.2.0인 것으로 나타났습니다.Oracle Entity Framework 패키지 매뉴얼에서 설명한 바와 같이

주의: 어플리케이션이 웹 어플리케이션이고 위의 엔트리가 web.config에 추가되었으며 "oracle.manageddataaccess.client"와 동일한 설정 섹션 핸들러가 machine.config에도 존재하지만 "Version" 속성 값이 다른 경우 "There are a duplicate 'oracle.managed dataaccess.client' 섹션이 정의되어 있을 수 있습니다."라는 오류 메시지가 나타납니다.실행 시 서비스됩니다.이 경우 웹 응용 프로그램에서 이 오류가 발생하지 않도록 machine.config의 "oracle.manageddataaccess.client" 구성 섹션 핸들러 엔트리를 machine.config에서 삭제해야 합니다.단, 머신 상에 machine.config 내의 이 엔트리에 의존하는 다른 어플리케이션이 있을 수 있으므로 이 설정 섹션핸들러 엔트리는 어플리케이션의 모든 엔트리로 이동해야 합니다.종속된 시스템의 NET 구성 파일.

에 다른 버전섹션을 추가하려고 했습니다.NET machine.config가 성공하지 못했습니다(버전 4.121.2.0 섹션이 있었고 버전 4.122.1.0 섹션이 추가되었습니다).machine.config에서 "oracle.manageddataaccess.client" 섹션을 삭제한 후 위의 web.config에 추가함으로써 ORA-12154가 해결되었습니다.

솔루션 #1의 개요:

  1. 에서 "oracle.manageddataaccess.client"를 삭제합니다.NET machine.config
  2. TNS_ADM 제공위와 같이 web.config의 IN 구성 설정

솔루션 2

이 문제를 조사하면서 TNS_ADMIN 환경변수가 설정되어 있지 않다는 것을 알게 되었습니다.TNS_ADMIN이라는 새로운 환경변수를 생성하여 값을 "C:\Oracle\product\12.1.0\client_1\Network\Admin"을 클릭합니다.web.config 변경 내용을 삭제하고에서 "oracle.manageddataaccess.client" 섹션을 삭제했습니다.NET machine.config. 단, ORA-12154는 아직 수령되지 않았습니다.기계를 재부팅한 후에야 문제가 해결되었습니다.

솔루션 #2의 개요:

  1. TNS_ADMIN이라는 새로운 환경변수를 만들고 값을 "C:"로 설정합니다.\Oracle\product\12.1.0\client_1\Network\Admin"
  2. 머신의 재기동

솔루션 3

레지스트리에 올바른 버전의 엔트리를 추가했더니 문제가 해결되었습니다.

HKLM\Software\Wow6432Node\Oracle\ODP.NET.Managed\4.121.2.0  

은 " " " 입니다.TNS_ADMINfile:tnsnames가 를 가리킵니다.

C:\Oracle\product\12.1.0\client_1\network 

★★★★★★★★★★★★★★가 아니다.C:\Oracle\product\12.1.0\client_1\network\admin더입니니다다

여러 가지 문제가 있을 수 있지만 Oracle 10g을 사용하는 경우 Oracle 10g을 제거하고 레지스트리에서 값을 제거한 후 Oracle 11g을 설치합니다.단, oracle 11g을 사용하고 있는 경우 먼저 레지스트리를 체크하여 홈을 가리키고 있는지 여부를 확인합니다.sql developer 를 몇 번이고 인스톨 하기 때문에, 복수의 집이 있는 경우가 있습니다.이 경우 불필요한 홈레지스트리 값을 삭제하거나 이러한 모든 홈에 tns 및 sql.net 파일을 추가하여 문제를 해결할 수 있습니다.저는 그렇게 해결했어요.

저도 같은 문제가 있었어요.제 경우 AnyCPU 설정을 사용하여 구축된 웹 서비스를 사용하고 있었습니다.WCF는 32비트의 Oracle 데이터 액세스컴포넌트를 사용하고 있었기 때문에 콘솔클라이언트에서 호출하려고 했을 때도 같은 에러가 발생하고 있었습니다.따라서 x86 기반의 설정을 사용하여 WCF 서비스를 컴파일 했을 때 클라이언트는 웹 서비스에서 데이터를 정상적으로 얻을 수 있었습니다.

"Any CPU"로 컴파일하여 x64 플랫폼에서 실행하면 앱이 WOW64(Windows 64의 경우 Windows 32)에서 시작되지 않았기 때문에 32비트 dll(이 경우 Oracle Data Access 구성 요소)을 로드할 수 없습니다.따라서 Oracle Data Access 컴포넌트의 32비트 의존성을 허용하기 위해 플랫폼 타깃 x86을 사용하여 웹 서비스를 컴파일하여 해결했습니다.

64비트 ODAC 드라이버가 머신에 인스톨 되어 있는 경우, 그 대신에 문제가 해결됩니다.

LDAP 를 사용하고 있는 경우는, 환경 변수가 「」인 것을 확인해 주세요.TNS_ADMIN"이 존재하며 "ldap.ora" 파일이 포함된 폴더를 가리킵니다.

이 변수가 존재하지 않으면 변수를 생성하고 Visual Studio를 재시작하십시오.

Oracle 11에서 발생한 또 다른 불쾌한 오류 유형은 행의 첫 번째 열('XX=(...)'이 아닌 'XX=(...)')에서 시작하지 않고 앞의 항목과 함께 구문 분석되어 잘못된 형식이 되는 tnsnsnames.ora 항목입니다.

치환된 bosced 파일과 로 이 는 "orr" tnsnames.ora"를 할 수 .tnsping명령줄 유틸리티:tnsnames.ora 엔트리의 이름을 전달하면 정의의 완전한 텍스트가 나타납니다.

스티븐이 한 말을 저도 처음 놓쳤으니 다시 한 번 말해 주세요.TNS_ADMIN 및 " " " 입니다.ORACLE_HOME로 설정되어 있다.C:\instantclient_11_ 및 2개th tnsnames.ora파일은 저 안에 있습니다. 링크에서 을 찾았습니다.

이 오류(및 ORA-6413: Connection not open)는 응용 프로그램 실행 파일 경로의 괄호 및 10.2.0.1 이하의 Oracle 클라이언트 라이브러리의 버그로 인해 발생할 수도 있습니다.

오라클 클라이언트 라이브러리를 업그레이드하거나 실행 파일 경로를 변경해야 합니다.

자세한 것은, 다음을 참조해 주세요.

프로세스 모니터를 사용하여 tnsnames.ora 파일에 대해 name not found 로그를 검색합니다.

환경변수를 확인합니다.유효하지 않은 경우 모든 Oracle 클라이언트를 제거한 후 다시 설치합니다.

Visual Studio 2013에서 SSIS 프로젝트에서 오류가 발생했습니다.Project, Properties, Debugging, Run64BitRuntime = false를 설정하면 SSIS 패키지가 실행됩니다.그러나 패키지를 서버에 도입할 때는 값을 true로 설정해야 합니다(서버는 64비트 Windows 2012/Sql 2014).

Visual Studio가 32비트 어플리케이션이기 때문인 것 같아요.

이것은 오래된 질문이지만, Oracle의 최신 인스톨러도 개선되지 않았기 때문에, 저는 최근 이 늪에 빠져 며칠 동안 헤매고 있는 자신을 발견했습니다.

이 시나리오는 SQL Server 2016 RTM이었습니다.32비트 Oracle 12c Open Client + ODAC는 Visual Studio Report Designer 및 Integration Services Designer에서 정상적으로 동작했으며 SSIS 패키지도 SQL Server Agent(32비트 옵션 포함)를 통해 실행되었습니다.데이터 소스를 정의하고 테스트할 때 64비트는 Report Portal에서 정상적으로 동작했지만 보고서를 실행하면 항상 "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 클라이언트 12c(32비트)와 ODAC의 Oracle 드라이버를 인스톨 합니다.

a. 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 )에서 다음 파일을 다운로드하여 압축을 풉니다.

i. winnt_12102_client32.zip

ii. ODAC112040Xcopy_32비트지퍼

b. winnt_12102_client32\client32\setup.exe를 실행합니다.[ Installation Type ]그래서 [Admin]를 선택합니다.설치 위치에 C:를 입력합니다.\Oracle\Oracle12.다른 기본값을 사용합니다.

c. 명령 프롬프트 "As Administrator"를 시작하고 디렉토리(cd)를 ODAC112040Xcopy_32bit 폴더로 변경합니다.

d. install.bat all C: 명령어를 입력합니다.\Oracle\Oracle12 odac

e. tnsnames.ora 파일을 다른 머신에서 다음 폴더로 복사합니다.*

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

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

Oracle Client 12c(x64) 및 ODAC 설치

a. 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 )에서 다음 파일을 다운로드하여 압축을 풉니다.

i. winx64_12102_client.지퍼

ii. ODAC121024Xcopy_x64.지퍼

b. winx64_12102_client\client\setup.exe를 실행합니다.[ Installation Type ]그래서 [Admin]를 선택합니다.설치 위치에 C:를 입력합니다.\Oracle\Oracle12_x64.다른 기본값을 사용합니다.

c. 명령 프롬프트를 "관리자로서" 기동하여 디렉토리(cd)를 C:\Software\Oracle Client\로 변경합니다.ODAC121024Xcopy_x64 폴더.

d. install.bat all C: 명령어를 입력합니다.\Oracle\Oracle12_x64 odac

e. tnsnames.ora 파일을 다른 머신에서 다음 폴더로 복사합니다.*

i. C:\Oracle\Oracle12_x64\network\admin*

ii. C:\Oracle\Oracle12_x64\product\12.1.0\client_1\network\admin*

* EZCONNECT 방식을 사용하는 경우 이러한 절차는 필요하지 않습니다.

ODAC의 인스톨은 까다롭고 불명확합니다.Dan English가 그 방법(상세)을 가르쳐 준 덕분입니다.

Microsoft 지원에서 이 링크를 사용합니다.

IUSR_MachineName 사용자에게 oracle home 폴더에 대한 권한을 부여하여 문제를 해결할 수 있었습니다.

비밀번호에 @가 포함되어 있는 경우 변경해야 합니다.대부분의 Oracle 제품은 비밀번호에 @ 문자를 사용할 수 없습니다.

이 에러의 원인은 client_32\NETWORK\ADM 아래에 있는tnsnames.ora 파일이 없기 때문입니다.입력

  • [ Control panel ]-> [ Environment Variables ]를 검색하여 [Edit the system environment variables for your account](계정의 환경변수 편집)을 클릭합니다.

  • '환경 변수' 버튼을 클릭한 다음 '시스템 변수' 목록에서 '새로 만들기'를 클릭합니다.

  • 다음과 같이 상자를 채웁니다.

    • 이름 : TNS_ADM입력
    • 값: [PC상의 tns 파일 경로](예: D:\app[userName]\product\11.2.0\client_1\Network\Admin)
  • PC 재부팅 [변경사항 적용 중요]

저 같은 경우에는 접속 스트링을user/pass@19.168.x.x:portNum/SID로.user/pass@alias어디에alias는 tnsnames.ora 파일에 지정된 에일리어스로 동작합니다.

언급URL : https://stackoverflow.com/questions/7957955/ora-12154-could-not-resolve-the-connect-identifier-specified

반응형