最近遇到一个 Oracle 数据库连接问题很奇怪,配置好的 Oracle 无法连接,远程和本地都不可以,但配置方法用过很多次,同时配置了两台服务器一台可以另一台不行,操作步骤一模一样,排查了2个多小时最后发现是一个小地方出了问题,记录一下。
问题描述
连接错误信息:ORA-12518: TNS:监听程序无法分发客户机连接
DBMS: Oracle (版本 Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0)
区分大小写: 普通形式=upper,分隔形式=exact
驱动程序: Oracle JDBC driver (版本 23.5.0.24.07,JDBC4.3)
[66000][12518]
ORA-12518: TNS:监听程序无法分发客户机连接 (CONNECTION_ID=iwhs6oT4Q6GiAI0qcqdIkQ==)
https://docs.oracle.com/error-help/db/ora-12518/.排查过程
查看监听服务状态
lsnrctl service
尝试解决
- 调整 process 和 session 值,未解决。
- 修改dispatchers个数,未解决。
- LISTENER.ORA 的头部加入 DIRECT_HANDOFF_TTC_LISTENER = OFF,未解决。
最终解决
查看日志:d:/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
发现以下异常日志:TNS-12560: TNS: 协议适配器错误

查 $ORACLE_HOME/network/admin下的listener.ora、tnsnames.ora,确保主机名、端口、服务名与实际环境(如hosts文件和下方 SQL 查询的数据)一致。
select host_name from v$instance;通过以上 SQL 查到 host_name 为 SPM-SRV-DCJC-DE,而实际服务器主机名为 SPM-SRV-DCJC-DEV,最后少了一位导致不一致。
重新修改主机名后重启,问题解决。
🏝️~