2012-09-25 2 views
6

때때로 우리의 생산 환경에서이 "네트워크 어댑터가 연결을 설정할 수 없습니다"라는 문제가 발생하기 시작했습니다. 해결책을 얻지 못했습니다. 우리는 2 오라클 인스턴스 (버전 10.2.0.4)와 RAC를 사용하는IOException : 네트워크 어댑터가 연결을 설정할 수 없습니다.

  1. : 여기

    는 우리의 환경에 대한 몇 가지 정보입니다.
  2. 우리는 RAC 위에 실행되는 여러 응용 프로그램 서버 (JBoss AS5)를 가지고 있습니다.
  3. oracle-ds.xml의 연결 URL은 "jdbc : oracle : thin : @ (설명 = (ADDRESS = (주소 = (프로토콜 TCP) (호스트 = db1_vip) (포트 = 1521) (CONNECT_DATA = (SERVER = DATE)) (SERVICE_NAME = G1db) (FAILOVER_MODE = (TYPE = SELECT) (메소드 = 기본) (RETRIES = 120) (DELAY = 5)))) "
  4. 우리는
  5. 오라클 인스턴스와 애플리케이션 서버 사이에 방화벽이 두 애플리케이션 서버의/etc/hosts 파일에뿐만 아니라이 개 오라클 인스턴스의 실제 IP를 db1_vip/db2_vip 추가 우리는 두 Oracle 인스턴스 모두에서 1521 포트를 열었습니다.

우리는 네트워크 또는 오라클 TNS 리스너에 어떤 문제가 있는지 확인하는 테스트를 다음 실행했습니다 : 모두 오라클 인스턴스에 응용 프로그램 서버에서

  1. 실행 ping이 모든 것이 어떤 패킷 손실없이 잘 작동합니다.
  2. 애플 리케이션 서버에서 두 오라클 인스턴스로 텔넷 1521 포트, 아무 잘못.
  3. tnsping도 정상적으로 작동합니다.
  4. 리스너 로그를 확인했지만 아무 것도 발견하지 못했습니다.

가장 이상한 것은이 오류가 하나 개의 응용 프로그램 서버에서 약 10 시간 한 시간 일 것입니다,하지만 다른 응용 프로그램 서버에 1 ~ 2 회 발생합니다.

누구든지이 오류에 대해 밝힐 수 있습니까?

감사

[EDIT4] : 하나 개의 오라클 인스턴스를 tnsping 때 우리는 시간 제한 문제를 발견, 그래서 우리는 오직 하나 개의 인스턴스를 연결하는 JDBC URL을 변경하고, IOException가 다시는 이런 일이 없었는데 발견, 그래서 우리는 문제가 관련이 생각 데이터베이스와 DBA 팀은 계속이 문제를 조사 할 것입니다.

[EDIT3] : 우리는 다음 않았다 시도 :

  1. 사용할 수있는 TCP가있는 경우 대신 호스트 이름
  2. 사용 와이어 샤크의
  3. 를 사용하여 IP를 확인하기 위해 응용 프로그램 서버와 데이터베이스 서버 사이의 방화벽 패킷 문제.그 중

아무도 ~ 누군가가 도와주세요, 성공하지

[편집] : 오류 스택 추적 :

java.sql.SQLException: Io Exception: The Network Adapter could not establish the connection 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255) 
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387) 
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:414) 
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165) 
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35) 
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801) 
    at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:207) 
    ... 5 more 
+0

그것의 단지를, 그것은 테스트 힌트 : x64에서 java7로 네트워킹 오류가 발생했습니다. java7을 사용하는 경우 버전 6을 시도하십시오. – Mirko

+0

우리는 두 응용 프로그램 서버 모두에서 jdk5를 사용하고 있습니다. – asticx

+0

호스트 이름 대신 DB 서버의 IP 주소를 사용해보십시오. 이것이 아무런 장애없이 작동한다면, probs를 dns hostname resolution으로 좁힐 수 있습니다. – Zaki

답변

6

오류

은 java.sql.SQLException : 이오 예외 : 네트워크 어댑터가 연결을 설정할 수 없습니다.

Java/JDBC과 아무 관련이 없습니다. 네트워크 설정에 문제가있을 때 나타나는 오류입니다. 제 생각에 방화벽 문제입니다. 오류를 비활성화하고 오류가 아직 있는지 확인할 수 있습니까? 내가 IP를 사용할 때 사용 버추얼 (어댑터 검사 허가의 모든), 내 경우, 오류가 있다면 당신의 tnsping가!, 발견하지만

+1

이 오류는 간헐적 인 방식으로 발생하기 때문에 실제 원인이라고 생각합니다. ping 및 telnet 작업과 다른 응용 프로그램 서버가 대부분 작동합니다. . – asticx

+0

더 이상 비활성화 할 수 없습니다. 방화벽이 일부 tcp/ip 패킷을 삭제할 수 있으므로 클라이언트 시스템의 TCP 스택에 연결이 불가능한 것으로 해석됩니다. 그러나 그것은 단지 가설입니다. –

+0

우리는 앱 서버와 데이터베이스 서버 사이에서 핑을 사용했으며 패킷 손실이 발생하지 않았 음을 확인했습니다. 이것이 최선의 방법인지는 확실하지 않습니다. – asticx

-1

편집 연결 대신 사용하는 로컬 호스트

관련 문제