# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。