2014-03-06 3 views
1

Java를 통해 Oracle 데이터베이스에 연결하려고 할 때 "IO 오류 : 네트워크 어댑터가 연결을 설정할 수 없습니다"가 임의로 나타납니다. 때로는 오류가 발생하기 전에 응용 프로그램을 두 번 실행해야합니다."IO 오류 : 네트워크 어댑터가 연결을 임의로 설정할 수 없습니다."

// initializes database connection 
private static Connection initializeDatabaseConnection(Properties prop) { 

    System.setProperty("oracle.net.tns_admin", prop.getProperty("tnsLocation")); 

    try { 
     Class.forName("oracle.jdbc.OracleDriver"); 
    } 
    catch (ClassNotFoundException ex) 
    { 
     System.out.println(ex.getMessage()); 
    } 

    String dbURL = "jdbc:oracle:thin:@" + prop.getProperty("serviceName"); 
    String username = prop.getProperty("username"); 
    String password = prop.getProperty("password"); 

    Connection conn = null; 

    try { 
     conn = DriverManager.getConnection(dbURL, username, password); 
    } 
    catch (SQLException ex) 
    { 
     System.out.println("Error initializing database connection. " + ex.getMessage()); 
     System.exit(1); 
    } 

    return conn; 
} 

왜 그 오류가 임의로 발생합니까? ojdbc6.jar 드라이버와 함께 JDK 1.7을 사용하고 있습니다.

+0

오, 예, 저는 tnsnames.ora 파일을 사용하고 있습니다. – farbodg

+0

네트워크 문제 인 것처럼 들리 겠지만 라우터 또는 그 종류가 좋지 않을 수도 있습니다. –

답변

2

다운로드 PingPlotter를 켜고 켭니다 (24 시간 정도 실행). 과거의 그래프를 보면, 앱이 오라클에 연결할 수없는 것과 동시에 IP 주소가 떨어지거나 응답 시간이 지붕을 통과하는 것을 볼 수 있습니다. 논리 오류가 없으므로 서버에 과부하가 걸리거나 사용자와 사용자간에 중대한 혼잡이 발생합니다. VPN을 통해 연결하고 있습니까?

ping -t <IP address or hostname> 

핑 플로터가 자주 ping을하지 않으며 좋은 그래프를 작성합니다

http://www.pingplotter.com/

또는 단지는 한 시간 정도 연속 모드에서 명령 줄에서 핑을 사용합니다.

원격으로 작업하는 경우 ISP가 될 수 있습니다. 그렇지 않으면 네트워크 관리자 또는 DBA에게 문의하십시오.

분명히 DB 연결 상태가 좋지 않아 프로덕션 환경에 들어갈 수 없으므로 개발 환경에서이 문제가 발생했을 것입니다. 결국 응용 프로그램을 실행하려는 시스템에 전개하여 성능이 향상되는지보십시오.

더 나은 결과를 얻기 위해 할 수있는 일이 없다면 JDBC 드라이버의 초기 로그인 시간 초과를 늘리는 것이 좋습니다. 드라이버에 따라, 그것에 대해 이동하는 방법에는 여러 가지가 있지만 여기에 구글 JDBC setLoginTimeout

은 예입니다.

Connection timeout for DriverManager getConnection

+0

도움 주셔서 감사합니다. 나는 그 문제가 무엇인지 알았다. 동료들과 이야기 한 후 RAC가 작동하는 방식 때문에이 문제가 일반적이라고 들었습니다. Oracle RAC 클러스터에 연결하고 있으며 연결하려는 서비스 이름 아래에 세 개의 호스트가 있습니다. 연결을 초기화 할 때로드 밸런서는 연결에 사용할 데이터베이스 서버의 컴퓨터 이름 (IP 주소 아님)을 반환합니다. 따라서 내 컴퓨터가 서버의 컴퓨터 이름을 확인하려고하면 실패합니다. 호스트 파일에 항목을 추가하는 것이 수정되었습니다. 이렇게하고 나면 나의 실패가 멈췄다. – farbodg

+0

물론입니다. 저는 RAC에 익숙합니다. 클라이언트 시스템이 성공적으로 구성되면 RAC로드 밸런싱은 JDBC 클라이언트 (사용자가 발견 한 것처럼 들리는)에 투명해야합니다. 모든 RAC 노드 (vips)에 대해 호스트 파일에 항목을 넣었습니까? – codenheim

+0

예 호스트 파일에 세 대의 시스템을 모두 배치해야했습니다. – farbodg

관련 문제