2008-10-02 12 views
3

최근에 개발 서버 중 하나에 하나의 웹 응용 프로그램을 배포합니다. 나는 오라클, asp.net 및 C#을 사용하고 있습니다. 내가 응용 프로그램을 실행하면Ora 12154 오류

ORA-12154: TNS:could not resolve the connect identifier specified 

:이 오류가 나는 서버에서 응용 프로그램을 실행하면 모든 것이 잘 작동하지만 서버의 외부 응용 프로그램을 실행하려고하면 (예를 들어, 내 PC를 사용) 내 PC 비주얼 스튜디오와 함께 잘 작동합니다.

Oracle이 서버 "A"에 설치되어 있고 응용 프로그램이 서버 "B"에 설치되어 있습니다. 서버 "A"는 하나의 도메인에 있고 서버 "B"는 다른 도메인에 있습니다. 내 컴퓨터에는 동일한 도메인에 서버 "A"가 있습니다. 나는 C에서 파일 tnsname.ora을 찾을 수 있습니다 내 PC에서

: \ 오라클 \ 제품 10.2.0 \ client_1 \ 네트워크 \의 ADMIN \하지만, 서버의 "B"나는 그것을 어디

을 발견 할수 없어 어떤 생각? 도움 주셔서 감사합니다.

+0

이 게시물의 제목을 더 자세히 설명하십시오. –

+0

오라클 지원 질문이 아닌 프로그래밍에 관한 질문을 게시하십시오. – ColinYounger

답변

0

추측 : Oracle 클라이언트는 서버 B에 설치되어 있지 않은

당신은 오라클 클라이언트가 다음 여전히 이러한 네트워크의 디렉토리로 (어떤 위치에 TNSNAMES 파일을 넣을 수 있습니다 설치이있는 경우 몫). 이렇게하려면 TNS_ADMIN 시스템 변수 (XP에서는 시스템 특성 -> 고급 -> 환경 변수)를 tnsnames 파일이 들어있는 디렉토리로 설정하십시오. \ 오라클 \ ora92 \ 네트워크 \ ADMIN에

3

아직 시도해 보셨습니까? (http://ora-12154.ora-code.com/에서)

ORA-12154 : TNS는 : 지정된 접속 식별자를 확인할 수 없습니다
원인 : 데이터베이스 또는 기타 서비스에 대한 연결이 연결 식별자를 사용하여 요청하였고, 지정된 접속 식별자로 확인할 수 없습니다 구성된 명명 메소드 중 하나를 사용하는 연결 설명 자. 예를 들어, 사용 된 연결 식별자 유형이 넷 서비스 이름 인 경우 이름 지정 방법 저장소에서 넷 서비스 이름을 찾을 수 없거나 저장소를 찾거나 도달 할 수 없습니다.
작업 : - 당신이 (TNSNAMES.ORA 파일) 지역의 이름을 사용하는 경우 :

  • 는 "TNSNAMES는"오라클 넷 프로필의 NAMES.DIRECTORY_PATH 매개 변수의 값 중 하나로 나열되어 있는지 확인합니다 (SQLNET.ORA)

  • TNSNAMES.ORA 파일이 있고 적절한 디렉터리에 있으며 액세스 할 수 있는지 확인하십시오.

  • 연결 식별자로 사용 된 네트워크 서비스 이름이 TNSNAMES.ORA 파일에 존재하는지 확인하십시오.

  • TNSNAMES.ORA 파일에 구문 오류가 없는지 확인하십시오. 일치하지 않는 괄호 또는 길잃은 문자를 찾습니다. TNSNAMES.ORA 파일의 오류로 인해 사용할 수 없게 될 수도 있습니다.

  • 당신이 디렉토리 이름을 사용하는 경우 :

  • "LDAP은"오라클 넷 프로필 (SQLNET.ORA)의 NAMES.DIRETORY_PATH 매개 변수의 값 중 하나로 나열되어 있는지 확인합니다.

  • LDAP 디렉토리 서버가 작동 가능하고 액세스 가능한지 확인하십시오.

  • 연결 식별자로 사용 된 네트워크 서비스 이름 또는 데이터베이스 이름이 디렉터리에 구성되어 있는지 확인하십시오.확인

  • : 당신은 쉽게 연결 이름을 사용하는 경우

  • 사용되는 기본 컨텍스트는 정규화 된 네트 서비스 이름 또는 연결 식별자

  • 으로 전체 LDAP DN을 지정하여 올바른지 확인 "EZCONNECT"는 Oracle Net 프로파일 (SQLNET.ORA)의 NAMES.DIRETORY_PATH 매개 변수 값 중 하나로 나열됩니다.

  • 지정된 호스트, 포트 및 서비스 이름이 올바른지 확인하십시오.

  • 연결 식별자를 따옴표로 묶으십시오. 이름 지정에 대한 자세한 정보는 Oracle Net Services 관리자 안내서 또는 Oracle 운영 체제 특정 안내서를 참조하십시오.

0

ORACLE_HOME 서버 B에 설정되어 : - C TNS_ADMIN : 예를 들어 나를 위해

나는 시스템 변수가?

+0

네,하지만 다시 설치하려고합니다. 답변을 모두 시도 할 것입니다. –

0

"서버 B"(응용 프로그램 서버)에 Oracle Client를 설치하고 TNSNAMES.ORA 파일을 구성해야합니다. 그렇지 않으면 실행중인 코드가 응용 프로그램에서 사용하는 데이터베이스를 어디에서 찾을 것인지 알지 못하기 때문에 필요합니다. 아마도 web.config 또는 하드 코딩 된 데이터 소스에서 데이터 소스를 구성했을 것입니다. 기억하십시오 - Oracle 클라이언트가 없으면 (쉽게) Oracle에 액세스 할 수 없습니다.

3

TNS 오류를 해결하는 것은 정말 고통 스러울 수 있습니다. 명심할 몇 가지 사항.

대부분의 개발 환경 (예 : Visual Studio)은 TNS 연결 정보의 복사본을 유지하고 TNSNAMES.ora 파일을 사용하지 않습니다. 이 정보가 보관 된 파일은 TNSNAMES.ora로 호출 할 필요가 없습니다. 이는 단지 기본 이름입니다. 어떤 당신은 오라클 클라이언트 소프트웨어 (또는 Oracle 데이터베이스)가있는 경우 당신은 당신의 tnsnames.ora 파일이 올바르게 구성되어 있는지 확인하는를 tnsping 를 사용하면 서버 B.

에서 찾을 수없는 이유가 될 수 있습니다.

TNSNAMES.ora 파일 구성에서 가장 자주 발생하는 문제점은 잘못된 서비스 이름을 사용하거나 잘못된 호스트 이름을 사용하는 것입니다. SQL NET 설정에 따라 "ODB_A"를 "ODB_A.WORLD"로 또는 그 반대로 변경해야 할 수도 있습니다. Oracle 10의 경우, 후자는 기본 SQL NET 설정입니다. 후자의 경우 ping을 사용하여 서버 "A"를보고 "SERVERA"또는 "SERVERA.DOMIN.COM"또는 IP 주소를 사용해야하는지 확인해야합니다.

+0

와우, 나는 그 중 하나를 알지 못했습니다 ... 그 중 하나 –

0

같은 문제가있었습니다. TNSNAMES.ORA가 out 배포 환경에서 다른 ADDRESS_NAME 및 SID/SERVICE_NAME을 가지고 있었고 응용 프로그램이 SID를 사용하도록 구성되었으므로 문제가 발생했습니다.

에 대한 연결 문자열은 ADDRESS_NAME을 포함해야 아닌 SID

0

가능한 해상도 -

는 TNSNAMES.ORA이 존재하고 액세스 할 수 있는지 확인합니다.

TNSNAMES.ORA에 구문 오류가 없는지 확인하십시오.

연결 문자열이 올바른지 확인하십시오.

DNS 문제가 있는지 확인하십시오. 대신 프로그램 파일 (86)의의 프로그램 파일 내에서 SQL 개발자를 설치하는 PL의 SQL 개발자 client.try을 사용하여 서버에 연결하는 동안 문제가있는 경우

0

환경 추가

Variable Name: TNS_ADMIN 

Variable Value: (YourDrive):\app\(UserName)\product\11.2.0\dbhome_1\NETWORK\ADMIN 
0

을 나는 비슷한 문제에 직면했다. 아래 코드는 내 시스템에서 작동하지만 tnsnames.ora 파일에 tns 항목을 추가했지만 다른 서버에서 작동하지 않았습니다.

con = new OracleConnection(); 
con.ConnectionString = "User Id=username;Password=password;Data Source=uit45"; 
con.Open(); // throws error here 

파기와 파기 후에, 나는 이것을위한 해결책을 발견했다. 우리는 tns 파일의 엔트리를 무시할 필요가 있으며 연결 문자열로 tns 항목을 줄 수 있습니다. 아래 코드를 사용해보십시오. 당신이 특히 HOST,PORT,SID,User IdPassword를 들어, 관련 값을 줄 필요가

con = new OracleConnection("Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=db-uit45.xxx)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SID=uit45)));User Id=username;Password=password"); 
con.Open(); 

참고.