问题现象 #
系统登录时报错,日志提示:
ERROR 2025-05-19 09:08:06,149 Druid-ConnectionPool-Create-172853382 com.alibaba.druid.pool.DruidDataSource
- create connection SQLException, url: jdbc:oracle:thin:@10.25.243.120:1521/orcl, errorCode 12518, state 66000
java.sql.SQLException: Listener refused the connection with the following error:
ORA-12518, TNS:listener could not hand off client connection
错误分析 #
ORA-12518错误表明Oracle数据库监听器无法将客户端连接交给数据库实例处理。这个错误通常与以下原因有关:
1. 数据库服务器资源不足 #
- CPU或内存使用率过高
- 进程数达到系统限制
- 数据库会话数达到最大限制
2. 监听器配置问题 #
- 监听器无法正确处理连接请求
- 监听器进程过载
3. 数据库实例问题 #
- 数据库实例无法接受新连接
- 数据库处于挂起或恢复状态
问题排查步骤 #
1. 检查监听器状态 #
使用lsnrctl status命令查看监听器运行状态:
C:\Users\Administrator>lsnrctl status
命令返回显示监听器正常运行,监听端口1521正常开放。
2. 尝试本地连接 #
使用sqlplus命令尝试本地连接:
C:\Users\Administrator>sqlplus / as sysdba
返回错误:
ERROR:
ORA-12560: TNS: 协议适配器错误
这个错误表明Oracle客户端无法正确初始化与数据库的连接。
3. 最终定位 #
经检查发现Oracle服务(OracleServiceORCL)已停止运行。
解决方案 #
- 打开Windows服务管理器
- 找到"OracleServiceORCL"服务
- 右键选择"重启"服务
- 等待服务重启完成
- 重新尝试连接数据库
预防措施 #
- 定期检查Oracle服务状态
- 配置Oracle服务自动重启
- 设置监控告警,及时发现服务异常
- 定期检查数据库运行日志
总结 #
本次故障是由于Oracle数据库服务意外停止导致,通过重启服务可以快速恢复。建议在生产环境中配置服务监控,避免类似问题影响业务运行。