获取“IO错误:网络适配器无法随机建立连接”

时间:2014-03-06 02:20:52

标签: java oracle jdbc ojdbc

当尝试通过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。

1 个答案:

答案 0 :(得分:2)

下载PingPlotter并将其打开(让它保持运行24小时左右)。观看历史图表,在应用程序无法连接到Oracle的同时,您可能会发现IP地址下降或响应时间。您没有逻辑错误,服务器严重超载,或者您与它之间存在严重拥塞。你是通过VPN连接的吗?

http://www.pingplotter.com/

或者只需在连续模式下从命令行使用ping一小时左右:

  ping -t <IP address or hostname>

Ping绘图仪不经常ping,它会创建漂亮的图形。

如果您正在远程工作,那么它可能是您的ISP。否则,请与网络管理员或DBA联系。

显然,您无法通过糟糕的数据库连接进入生产阶段,因此希望您只是从开发环境中看到此问题。尝试部署到计划最终运行应用程序的计算机,看看它是否有所改进。

如果没有什么可以做的更好,我建议增加JDBC驱动程序的初始登录超时。

Google JDBC setLoginTimeout

这是一个例子,虽然有几种方法可以解决它,具体取决于你的驱动程序。

Connection timeout for DriverManager getConnection