2012-05-25 7 views
1

Google은 연결 구성에 OID/LDAP 조회를 사용하고 있습니다. TNS_ADMIN 환경 변수와 oracle.net.tns_admin Java 특성이 올바르게 설정되어 있고 sqlnet.ora 및 ldap.ora가 들어있는 디렉토리를 가리 킵니다. 연결 문자열의씬 JDBC 클라이언트를 사용하여 LDAP/OID 조회를 통해 Oracle SID를 확인하는 중 문제가 발생했습니다.

java.sql.SQLRecoverableException: IO Error: could not resolve the connect identifier "ourtnsalias" 
     at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:458) 
     at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:546) 
     at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:236) 
     at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) 
     at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521) 
     at java.sql.DriverManager.getConnection(DriverManager.java:582) 
     at java.sql.DriverManager.getConnection(DriverManager.java:185) 
     at TnsTest.main(TnsTest.java:29) 
Caused by: oracle.net.ns.NetException: could not resolve the connect identifier "tnsalias" 
     at oracle.net.resolver.NameResolver.resolveName(NameResolver.java:181) 
     at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:416) 
     at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:687) 
     at oracle.net.ns.NSProtocol.connect(NSProtocol.java:247) 
     at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1102) 
     at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:320) 
     ... 7 more 
Exception in thread "main" java.lang.NullPointerException 
     at TnsTest.main(TnsTest.java:46) 

다음 맛 성공적으로 연결 :

  • 전체 TNS 문자열 :
    jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host.company.com)(PORT=####))(CONNECT_DATA=(SERVICE_NAME=service_name)))
  • 전체 LDAP 그러나, JDBC 연결 URL은 : 연결을 시도 할 때 jdbc:oracle:thin:@ourtnsalias에서 예외가 발생합니다 url :
    jdbc:oracle:thin:@ldap://oid.company.net:####/ourtnsname,CN=OracleContext,dc=company,dc=net

이것은 LDAP/OID 조회에 문제가 있음을 나타냅니다. 그러나 실행중인 tnsping ourtnsname도 성공적으로 연결됩니다.

OID/LDAP 조회를 수행 할 때 연결 문자열에서 TNS 별칭 만 사용하는 방법이 있습니까? 나는 프로그래머하지만 DBA하지 오전 시간 다시 같은 문제에 나의 동료를 도왔다

String connectionURL = "jdbc:oracle:thin:@ourtnsalias"; 
System.setProperty("oracle.net.tns_admin", "c:/oracle/network/admin"); 
Class.forName("oracle.jdbc.OracleDriver"); 
Connection c = DriverManager.getConnection(connectionURL, userid, password); 
+0

정확하게 똑같은 문제가 있습니다. 우리는 2 개의 서버가 거의 동일하게 구성되어 있고, 다른 하나는 오류를 반환합니다. 심지어 tnsping 등이 잘 작동한다고 생각합니다. 해결 방법을 찾았습니까? – Bittercoder

답변

0

: 완성도를 위해서

, 여기에 관련 자바입니다. 그래서이

System.setProperty("oracle.net.tns_admin", "c:/oracle/network/admin"); 

이있는 벽에 내 머리를 구타 한 후

System.setProperty("oracle.net.tns_admin", "c://oracle//network//admin"); 

또는

System.setProperty("oracle.net.tns_admin", "c:\\oracle\\network\\admin"); 
+0

두 가지 맛의 테스트 결과가 동일합니다. – jasonkarns

2

을해야 도움이되는지 알려주세요, 그것은 우리가이었다에 대한 문제를 밝혀 TNS Names 항목에 여러 줄에 걸쳐 잘못된 탭/공백이있어 올바르게 구문 분석하지 못했습니다.

TNSPING이 TNSNAMES.Ora 파일을 올바르게 구문 분석 할 수 있었던 것은 놀랍지 만 jdbc Oracle Driver는 그렇지 못했습니다.

여기에 설명 된 규칙에주의를 기울이고, 다시 그것을 추가 조심스럽게 다음 TNSNAMES 항목의 모든 간격을 삭제하고, :

http://docs.oracle.com/cd/A57673_01/DOC/net/doc/NWUS233/apb.htm

이 문제를 해결에 도움을주었습니다.

jdbc:oracle:thin:@ourtnsalias 

에 :

jdbc:oracle:thin:@unknown 

다른 오류를주고 있었다 (답으로 우리를 인도 무엇

이로 전환, 즉 연결 식별자를 변경할 때 우리는 다른 오류를 얻을 것이라고했다 TNSNAmes.ora 파일이 실제로 읽혔는지 확인하기 위해 sysinternals 프로세스 모니터에서 검사하는 것과 함께) TNS 파일을 구문 분석 중이라고 제안했지만 문제를 일으키는 항목이 잘못되었습니다.

JDBC Oracle 클라이언트가 "TNS Entry for connection identifier"를 구문 분석 할 수 없다는 의미있는 오류가 반환되면이 모든 것을 쉽게 해결할 수 있다고 생각합니다. 이 다른 사람 밖으로 : 당신의 tnsnames.ora에 잘못된 문자

+0

고맙습니다 ...! 내 문제가 해결되었습니다. 파일 끝 부분에 공간이있었습니다. –

0

찾는 데 도움이

희망.

나는 내 파일에

test, test.WORLD=... 

했다. 변경하면

test.WORLD= 

으로 변경되었습니다.