ORA-12541错误主因是监听器未启动或仅绑定localhost/127.0.0.1,需先执行lsnrctl start启动监听,再修改listener.ora中HOST为实际IP或0.0.0.0并reload,同时确保Navicat host填服务器真实IP、端口一致且防火墙放行。
监听器根本没跑,lsnrctl status 返回 “not currently running”
这不是 navicat 的问题,是 oracle 服务端压根没启动监听。很多人一看到超时就去改客户端配置,结果白忙活。
- 登录 Oracle 服务器,直接执行
lsnrctl status—— 如果提示监听未运行,别犹豫,先lsnrctl start - 监听默认端口不一定是 1521:查
$ORACLE_HOME/network/admin/listener.ora里PORT的实际值,别信文档或记忆 - 启动后仍报超时?再跑一次
lsnrctl status,确认输出里有STATUS of the LISTENER和至少一个READY状态的服务
netstat 显示端口在 LISTENING,但绑定的是 127.0.0.1
监听起来了,端口也开着,但只绑定了本地回环地址,远程连接自然被拒——这是最隐蔽的配置陷阱。
- Linux 执行:
netstat -an | grep :1521(把 1521 换成你实际监听的端口),看第二列是否为*:1521或0.0.0.0:1521;如果是127.0.0.1:1521,说明只接受本机连接 - Windows 执行:
netstat -ano | findstr :1521,同样检查 IP 绑定情况 - 修复方式:编辑
listener.ora,把ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)中的localhost改成服务器真实 IP(如192.168.5.100)或0.0.0.0,然后lsnrctl reload
Navicat 里填了 localhost 或 127.0.0.1,但数据库不在本机
这个错误高频到离谱:服务器 IP 是 10.0.2.15,Navicat host 却填 localhost —— 它会尝试连自己笔记本上的 Oracle,当然超时。
- host 字段必须填数据库服务器对外可访问的真实 IP(不是
localhost、不是127.0.0.1、也不是内网 DNS 别名,除非你本地 hosts 已映射且能解析) - port 必须和
listener.ora中ADDRESS段的PORT完全一致,差 1 都不行 - Service Name 和 SID 别混用:
SELECT value FROM v$parameter WHERE name = 'service_names'查 Service Name;SELECT instance_name FROM v$instance查 SID;12c+ 强烈建议用 Service Name
防火墙/安全组放行了端口,但连接仍卡在 TCP 握手阶段
现象是:ping 通、tnsping 超时、tcping server_ip port 也超时 —— 这说明请求发出去就没回音,大概率是中间链路拦截。
- 服务器操作系统防火墙要开对应端口:Linux 用
firewall-cmd --add-port=1521/tcp --permanent;Windows 在「高级安全 Windows 防火墙」中添加入站规则 - 云服务器(阿里云、AWS、腾讯云等)必须检查安全组规则,确保入方向放行目标端口,协议选 TCP,源 IP 可设为
0.0.0.0/0(测试用)或具体客户端网段 - 监听日志满也会导致类似症状:路径通常在
D:\app\diag\tnslsnr\{hostname}\listener\trace\listener.log(Windows)或$ORACLE_BASE/diag/tnslsnr/{hostname}/listener/trace/(Linux),日志超 4GB 就可能卡住监听,清空或重命名后lsnrctl stop && lsnrctl start
HOST 绑定地址写死为 localhost 这两点——它们不报错,只静默拒绝连接。











