errorCode 17002, state null java.sql.SQLException: Io 异常: The Network Adapter could not establish

在需要客户机去连接远程服务机的Oracle数据库时,可能会遇到连接不通的情况

如数据库报:“jdbc:oracle:thin:@192.168.1.84:1521:ORCL, errorCode 17002, state null java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection”错

首先要将服务端(要连接的远程端)电脑的listen.ora文件和tnsnames.ora文件的host改成主机的ip地址

主机ip可以通过win+R 输入cmd打开命令行 输入ipconfig

IPv4地址后面的就是本地主机的ip地址

listen.ora:

tnsnames.ora:

都将服务机的配置文件改成本地ip地址后重启电脑服务里面的OracleOraDB19Home1TNSListener和OracleServiceORCL服务

电脑服务可以通过win+R 输入Services.msc 快速打开服务

可以发现 用服务机的idea连接自己的ip地址的Oracle数据库 可以连通(这里Host输入的是服务机的ip地址)

然后此时用客户机的idea连接服务机的Oracle是可以连通的(这里的Host也是用的服务机的ip地址)

作者水平有限,仅供参考

### 解决 Java 应用程序中的 `SQLRecoverableException` 异常 当遇到 `java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish connection` 错误时,这通常意味着客户端尝试连接到 Oracle 数据库服务器失败。此问题可能由多种因素引起。 #### 可能的原因分析 1. **网络配置不正确** 如果数据库服务器和应用服务器之间的网络设置有问题,则可能导致该错误。检查防火墙规则以及确保端口开放是必要的措施[^1]。 2. **监听器未启动或配置有误** Oracle 数据库依赖于监听服务来接受来自外部的应用请求。如果监听进程没有运行或者其配置文件(通常是 listener.ora 和 tnsnames.ora)存在语法上的错误,那么即使其他条件都满足也无法成功建立连接。 3. **JDBC URL 配置不当** JDBC 连接字符串中包含了访问目标数据库所需的信息,任何拼写失误都会造成连接失败。确认使用的主机名、端口号和服务名称都是准确无误的非常重要。 4. **Oracle 客户端版本兼容性** 使用过期或不匹配版本的 Oracle Client 软件也可能引发此类问题。建议保持驱动程序最新并验证它是否支持所要连接的目标数据库版本。 5. **资源耗尽情况下的重试机制不足** 当大量并发连接试图同时打开而超过了系统的承载能力时,部分连接可能会被拒绝从而触发这个异常。适当调整应用程序内的最大活跃线程数或是优化查询效率可以缓解这一状况。 #### 推荐解决方案 为了有效处理上述提到的各种可能性,在排查过程中可采取以下行动: - 检查并修正所有涉及网络通信方面的参数设定; - 确认 Oracle Listener 正确安装且处于活动状态,并按照官方文档指导完成相应配置; - 对比已知有效的例子仔细核对当前项目的 JDBC Connection String 是否书写规范; - 更新至最新的稳定版 Oracle Driver 并测试不同版本间的互操作性; - 实现合理的超时策略与指数退避算法以应对瞬态性的负载高峰; ```java try { // 尝试获取数据库连接... } catch (SQLException ex) { if ("The Network Adapter could not establish the connection".equals(ex.getMessage())) { System.out.println("Failed to connect due to network issues."); // Implement retry logic here with exponential backoff strategy. } else { throw ex; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值