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가지로 귀결됩니다.
접속 문자열에서 지정한TNS 엔트리를 찾을 수 없습니다.
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
따라서 몇 가지 사항을 확인해야 합니다.
- tnsnames.ora 파일이 있습니까?콘솔이 접속할 수 있기 때문에 있다고 생각합니다.
- 파일에 서비스 엔트리가 있습니까?콘솔이 연결되면 저도 그렇다고 생각합니다.
- 응용 프로그램이 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 파일의 위치를 나타내는 섹션을 추가하려고 했습니다.
<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의 개요:
- 에서 "oracle.manageddataaccess.client"를 삭제합니다.NET machine.config
- 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의 개요:
- TNS_ADMIN이라는 새로운 환경변수를 만들고 값을 "C:"로 설정합니다.\Oracle\product\12.1.0\client_1\Network\Admin"
- 머신의 재기동
솔루션 3
레지스트리에 올바른 버전의 엔트리를 추가했더니 문제가 해결되었습니다.
HKLM\Software\Wow6432Node\Oracle\ODP.NET.Managed\4.121.2.0
은 " " " 입니다.TNS_ADMIN
file: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 클라이언트 라이브러리의 버그로 인해 발생할 수도 있습니다.
오라클 클라이언트 라이브러리를 업그레이드하거나 실행 파일 경로를 변경해야 합니다.
자세한 것은, 다음을 참조해 주세요.
- http://blogs.msdn.com/b/debarchan/archive/2009/02/04/good-old-connectivity-issue.aspx
- http://social.technet.microsoft.com/Forums/de-DE/ab662d63-6385-4f73-b27f-d526048f601f/connecting-to-oracle-on-64bit-x64-machine
프로세스 모니터를 사용하여 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 입니다.
나중에 도움이 될 경우를 대비해서(혹은 제가 다시 이 문제에 직면하게 될 경우) 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
'programing' 카테고리의 다른 글
클러스터 환경에서 실행 중인 스프링 스케줄링된 작업 (0) | 2023.03.09 |
---|---|
오라클이 대소문자를 구분하는 이유 (0) | 2023.03.09 |
URL에 JSON 콜을 발신하는 방법 (0) | 2023.03.09 |
스프링 부트에서의 여러 Web Security Configurer Adapter 사용 (0) | 2023.03.09 |
jQuery / Ajax - $.ajax() 콜백에 매개 변수 전달 - 사용하기 좋은 패턴? (0) | 2023.03.09 |