应先确认监听器绑定ip是否为服务器真实ip而非127.0.0.1:执行lsnrctl status检查host值,用netstat -tlnp | grep :1521验证监听绑定地址,确保navicat中host填真实ip、port与listener.ora一致,并同步开放防火墙及云安全组1521端口。
确认监听器是否真正监听外部ip而非127.0.0.1
ora-12170(tns connect timeout)最常被误判为网络或客户端问题,但实际八成出在监听器绑定地址上。监听器启动了≠能被远程访问——如果listener.ora里address段的host写的是localhost或127.0.0.1,它只响应本机请求。
检查方式:登录Oracle服务器,切换到oracle用户,执行:
lsnrctl status观察输出中类似
(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.5.100)(PORT=1521))这样的行——HOST值必须是服务器对外网卡的真实IP(如192.168.5.100),不能是localhost或127.0.0.1。修复方法:
- 编辑
$ORACLE_HOME/network/admin/listener.ora - 将
HOST明确改为服务器实际IP(不要用主机名,除非/etc/hosts已静态映射) - 重启监听:
lsnrctl stop && lsnrctl start
验证端口在服务器上是否处于LISTENING且可被远程访问
即使lsnrctl status显示正常,若端口未真正暴露,Navicat仍会超时。Linux下仅靠netstat -an | grep 1521不够,要确认状态+绑定IP:
netstat -tlnp | grep :1521应看到类似
tcp 0 0 192.168.5.100:1521 0.0.0.0:* LISTEN 12345/tnslsnr——关键看第二列是不是0.0.0.0或具体IP,而非127.0.0.1。从Navicat所在机器测试连通性:
- Windows:
telnet 192.168.5.100 1521(若无telnet,用tcping 192.168.5.100 1521) - macOS/Linux:
nc -zv 192.168.5.100 1521
检查防火墙与云平台安全组是否放行1521端口
CentOS 7+/8默认启用firewalld,即使监听绑定了正确IP,若防火墙未放行,连接请求会被静默丢弃,Navicat等满60秒报超时。
临时放开测试:
sudo firewall-cmd --add-port=1521/tcp --permanent<br>sudo firewall-cmd --reload
云服务器(阿里云/腾讯云/AWS)必须额外检查安全组规则:
- 入方向规则中添加
1521/tcp,源IP建议先设为0.0.0.0/0快速验证 - 确认规则已“生效”,部分平台需手动点击“应用”
Navicat连接配置中host/port必须与监听器完全一致
很多人填对了Service Name却连不上,栽在host字段——Navicat里填localhost或127.0.0.1,等于让Navicat去连自己本机,和Oracle服务器毫无关系。
务必核对:
-
host:填Oracle服务器对外IP(如192.168.5.100),不是localhost、不是主机名(除非本地nslookup能解析) -
port:必须和listener.ora中PORT值严格一致;Oracle 19c默认仍是1521,但可能被改过,别凭印象填 - Service Name:查数据库内
SELECT value FROM v$parameter WHERE name = 'service_names';,别和SID混用
最容易被忽略的点是监听器HOST配置和防火墙的双重校验:改完listener.ora必须lsnrctl reload或restart,而firewalld规则修改后必须--reload;两步缺一不可,且顺序无关——它们是并行生效的独立环节。











