2

Java 経由で Oracle データベースに接続しようとすると、「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 を使用しています。

4

1 に答える 1

3

PingPlotter をダウンロードしてオンにします (24 時間ほど実行したままにします)。履歴グラフを見ると、アプリケーションが Oracle に接続できないと同時に、IP アドレスが低下したり、応答時間が異常に遅くなったりすることがわかります。サーバーが大幅に過負荷になっているか、サーバーとの間で大きな輻輳が発生しているため、論理エラーはありません。VPN経由で接続していますか?

http://www.pingplotter.com/

または、コマンド ラインから ping を連続モードで 1 時間ほど使用します。

  ping -t <IP address or hostname>

Ping プロッターはそれほど頻繁に ping を実行せず、優れたグラフを作成します。

リモートで作業している場合は、ISP である可能性があります。それ以外の場合は、ネットワーク管理者または DBA に相談してください。

明らかに、DB 接続が不十分なままでは本番環境に入ることができないため、開発環境からこの問題が発生することを願っています。最終的にアプリケーションを実行する予定のマシンにデプロイしてみて、改善されるかどうかを確認してください。

改善するためにできることが何もない場合は、JDBC ドライバーの初期ログイン タイムアウトを増やすことをお勧めします。

Google JDBC setLoginTimeout

以下は一例ですが、ドライバーによってはいくつかの方法があります。

DriverManager getConnection の接続タイムアウト

于 2014-03-06T03:16:28.263 に答える