您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Oracle 数据库连接错误:SQLRecoverableException : IO Error:connection reset怎么解决
## 问题现象
在使用Java应用程序连接Oracle数据库时,可能会遇到以下异常:
```java
java.sql.SQLRecoverableException: IO Error: Connection reset
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:774)
at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:688)
该错误通常发生在网络不稳定、防火墙拦截或数据库服务端主动断开连接时,表现为客户端连接被意外终止。
SQLNET.EXPIRE_TIME
参数设置了连接存活时间-- 修改sqlnet.ora文件增加心跳检测
SQLNET.EXPIRE_TIME = 10 -- 单位:分钟
-- 检查资源管理器设置
SELECT * FROM DBA_RSRC_PLANS;
// JDBC URL添加自动重连参数
String url = "jdbc:oracle:thin:@//host:1521/SID"
+ "?oracle.net.CONNECT_TIMEOUT=5000"
+ "&oracle.jdbc.ReadTimeout=30000"
+ "&oracle.net.READ_TIMEOUT=30000";
// 推荐使用连接池并配置测试查询
HikariConfig config = new HikariConfig();
config.setConnectionTestQuery("SELECT 1 FROM DUAL");
config.setValidationTimeout(3000);
// Java启动参数添加
-Djava.net.preferIPv4Stack=true
-Dsun.net.client.defaultConnectTimeout=5000
-Dsun.net.client.defaultReadTimeout=30000
// 实现自定义重试逻辑
int maxRetries = 3;
int retryDelay = 5000; // 5秒
for (int i = 0; i < maxRetries; i++) {
try {
Connection conn = DriverManager.getConnection(url, user, pwd);
return conn;
} catch (SQLRecoverableException e) {
Thread.sleep(retryDelay);
}
}
oracle.jdbc.level=FINEST
oracle.net.level=ALL
Connection reset错误本质是TCP连接异常终止的表现,需要从网络层、数据库配置和客户端代码三个维度综合排查。建议先通过服务端日志($ORACLE_BASE/diag/rdbms/
)定位具体断开原因,再针对性调整参数配置。对于生产环境,推荐使用连接池配合心跳检测机制确保连接稳定性。
“`
(注:全文约650字,采用Markdown格式,包含代码块、列表和分级标题,便于技术文档阅读)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。