随机获取“IO错误:网络适配器无法建立连接”[重复]
Posted
技术标签:
【中文标题】随机获取“IO错误:网络适配器无法建立连接”[重复]【英文标题】:Getting "IO Error: The Network Adapter could not establish the connection" randomly [duplicate] 【发布时间】:2014-03-06 02:20:52 【问题描述】:尝试通过 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。
【问题讨论】:
哦,是的,我正在使用 tnsnames.ora 文件。 听起来是网络问题 - 可能是路由器或类似的东西坏了。 【参考方案1】:下载 PingPlotter 并打开它(让它运行 24 小时左右)。查看历史图表,您可能会发现 IP 地址下降或响应时间过长,同时您的应用程序无法连接到 Oracle。您没有逻辑错误,服务器严重超载,或者您与服务器之间出现严重拥塞。您是通过 *** 连接的吗?
http://www.pingplotter.com/
或者只是在连续模式下从命令行使用 ping 一个小时左右:
ping -t <IP address or hostname>
Ping 绘图仪不经常 ping,但它会创建漂亮的图表。
如果您在远程工作,那么它可能是您的 ISP。否则,请与网络管理员或 DBA 联系。
显然,您无法在数据库连接不佳的情况下投入生产,因此希望您只是从您的开发环境中看到这个问题。尝试部署到您计划最终运行应用程序的机器上,看看它是否有所改进。
如果您无法改善它,我建议您增加 JDBC 驱动程序的初始登录超时时间。
Google JDBC 设置登录超时
这里是一个示例,虽然有几种方法可以解决,具体取决于您的驱动程序。
Connection timeout for DriverManager getConnection
【讨论】:
感谢您的帮助。我弄清楚了问题所在。在与我的同事交谈后,我被告知由于 RAC 的工作方式,这个问题很常见。我正在连接到 Oracle RAC 集群,并且在我要连接的服务名称下有三个主机。当我初始化我的连接时,负载平衡器会返回我将用于连接的数据库服务器的机器名称(而不是 IP 地址)。因此,当我的机器尝试解析服务器的机器名称时,它会失败。解决方法是在您的主机文件中放置一个条目。这样做之后,我的失败就停止了。 当然。我熟悉RAC。成功配置客户端计算机后,RAC 负载平衡对您的 JDBC 客户端应该是透明的(听起来就像您发现的那样)。您是否将所有 RAC 节点 (vips) 的条目放入主机文件中?。 是的,我必须将所有三台机器都放在我的 hosts 文件中。以上是关于随机获取“IO错误:网络适配器无法建立连接”[重复]的主要内容,如果未能解决你的问题,请参考以下文章