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 小时左右)。观看历史图表,您可能会发现 IP 地址下降或响应时间过长,同时您的应用程序无法连接到 Oracle。您没有逻辑错误,服务器严重超载,或者您与服务器之间出现严重拥塞。你是通过VPN连接的吗?

http://www.pingplotter.com/

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

  ping -t <IP address or hostname>

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

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

显然,您无法在数据库连接不佳的情况下投入生产,因此希望您只是从开发环境中看到这个问题。尝试部署到您计划最终运行应用程序的机器上,看看它是否有所改进。

如果您没有办法让它变得更好,我建议您增加 JDBC 驱动程序的初始登录超时时间。

谷歌 JDBC 设置登录超时

这是一个示例,尽管有多种方法可以解决,具体取决于您的驱动程序。

DriverManager getConnection 的连接超时

于 2014-03-06T03:16:28.263 回答