Oracle局域网连接失败主因是监听器未启动或绑定127.0.0.1、防火墙拦截1521端口、tnsnames.ora地址错误、用户权限/密码问题;需依次检查lsnrctl状态、listener.ora配置、防火墙规则、客户端tnsnames.ora指向及用户账户状态与权限。
Oracle监听器没启动或配置不对
局域网连不上,十有八九是 oracle 服务端根本没对外“开门”。lsnrctl status 一跑,经常发现 lsnrctl 提示 “tns-12541: no listener”,或者虽然启动了,但监听的 ip 是 127.0.0.1 而不是实际局域网 ip(比如 192.168.1.100)。
实操建议:
- 用
lsnrctl stop+lsnrctl start重启监听器,别只 reload - 检查
$ORACLE_HOME/network/admin/listener.ora,确认LISTENER的ADDRESS中HOST不是localhost或127.0.0.1,应为服务器真实局域网 IP 或留空(让系统自动绑定) - Windows 下注意服务名是不是叫
OracleOraDB21Home1TNSListener(版本/路径不同名会变),别只看服务状态绿了就以为 OK
防火墙拦住了 1521 端口
Oracle 默认走 1521 端口,但 Windows 防火墙、Linux 的 iptables 或 firewalld 经常默认禁止入站。Navicat 在客户端报错通常是 ORA-12170: TNS:Connect timeout occurred,而不是权限类错误,这就是典型网络层被卡住。
实操建议:
- Linux 上执行
sudo firewall-cmd --permanent --add-port=1521/tcp+sudo firewall-cmd --reload - Windows 上进「高级安全 Windows 防火墙」→「入站规则」→ 新建规则 → 端口 → TCP 1521 → 允许连接 → 作用域选“仅此网络”(避免开到公网)
- 临时验证可先关防火墙(
systemctl stop firewalld或 Win 下禁用),连通后再开规则,别跳过这步
tnsnames.ora 客户端配置指向了错的地址
Navicat 连 Oracle 时如果填的是服务名(如 ORCL),它会去读本地 tnsnames.ora;如果填的是 Easy Connect 格式(192.168.1.100:1521/ORCL),则绕过该文件。很多人改了服务端监听地址,却忘了同步改客户端的 tnsnames.ora,结果 Navicat 一直往 127.0.0.1 上撞。
实操建议:
- 查 Navicat 是否启用了「使用 Oracle 客户端」:设置 → 连接 → Oracle → 勾选后,它才读
tnsnames.ora;不勾选就只认你手动输的主机+端口+SID/Service Name -
tnsnames.ora里对应条目的HOST必须是服务器局域网 IP,不能写localhost - Windows 下注意
tnsnames.ora路径是否在 Navicat 指定的 Oracle Client 目录下(比如C:\oracle\instantclient_21_1\network\admin\),不是系统环境变量里的那个
Oracle 用户没授权远程登录或密码过期
能 ping 通、telnet 192.168.1.100 1521 也通,但 Navicat 连上就报 ORA-01017: invalid username/password 或 ORA-28001: the password has expired,说明已进到 Oracle 层,但卡在认证环节。
实操建议:
- 用
sqlplus / as sysdba登服务器本机,运行SELECT username, account_status FROM dba_users WHERE username = 'YOUR_USER';,确认状态是OPEN,不是EXPIRED & LOCKED - 如果密码过期,执行
ALTER USER your_user IDENTIFIED BY newpass;;如果账户锁了,加ACCOUNT UNLOCK - 确保用户有
CREATE SESSION权限:GRANT CREATE SESSION TO your_user;
容易被忽略的是:Oracle 12c+ 默认 SEC_CASE_SENSITIVE_LOGON=TRUE,密码大小写必须完全匹配;另外有些环境启用了 SQLNET.EXPIRE_TIME,空闲连接会被服务端主动断开,Navicat 测试连接时可能因超时误判为认证失败。

















