TNS-12535超时最常见原因是Windows防火墙未放行1521端口,需在高级安全设置中新建入站规则允许TCP 1521端口,并确保勾选对应网络配置文件(域/专用/公用),同时确认listener.ora中HOST设为实际IP或主机名而非localhost。
Windows 防火墙没放行 1521 端口,tnsping 直接报 TNS-12535
这是最常见也最容易确认的连接超时原因:oracle 默认监听端口 1521 被 windows 防火墙拦截,客户端发不出去 syn 包,或者服务端回包被丢弃。现象就是 tnsping orcl 卡住 30 秒后返回 tns-12535: tns: 操作超时,而 ping 本机或目标 ip 是通的。
别只关防火墙——生产环境不允许;要精准放行:
- 打开「Windows 防火墙高级安全设置」→「入站规则」→「新建规则」
- 选「端口」→「TCP」→「特定本地端口:
1521」 - 操作选「允许连接」,配置文件勾选「域」「专用」「公用」(根据实际网络类型调整)
- 名称写清楚,比如「Oracle Listener - TCP 1521」
注意:oracle.exe 进程本身不直接监听端口,监听由 tnslsnr.exe 承担,所以规则必须基于端口,而非程序路径。
listener.ora 中 HOST 写成 localhost 或 127.0.0.1,远程连不上
监听配置写死了回环地址,意味着它只接受来自本机的连接,外部机器的 TCP 包会被静默丢弃,现象是 tnsping 超时,但 lsnrctl status 在本机显示正常。
改法很简单,但必须同步改两处:
-
listener.ora中的HOST值换成本机真实主机名(如WIN-3IDOESF6ATU)或局域网 IP(如192.168.1.100),不要用localhost -
tnsnames.ora中对应条目的HOST也要保持一致,否则客户端解析后连的是错地址 - 改完执行
lsnrctl stop→lsnrctl start生效,别只 reload
如果主机名 DNS 解析失败(比如 ping WIN-3IDOESF6ATU 不通),就改用 IP;也可在 C:\Windows\System32\drivers\etc\hosts 加一行 127.0.0.1 WIN-3IDOESF6ATU 强制本地解析,但仅限测试环境。
防火墙开了 1521,还是超时?检查是否启用了「公用网络」配置
Windows 防火墙对「公用网络」默认最严格,即使你加了入站规则,若当前网络类型被识别为「公用」,该规则可能不生效。现象是:同一台机器,连公司内网 OK,回家连 WiFi 就超时。
快速验证和修复:
- 右下角网络图标 → 右键「打开网络和 Internet 设置」→「状态」→「属性」,看「网络配置文件类型」是「公用」还是「专用」
- 如果是「公用」,点「编辑」→ 改成「专用」(仅限可信网络)
- 或者,在防火墙高级设置中,新建规则时务必勾选「公用」配置文件
这个细节常被忽略,尤其笔记本在不同网络间切换后,系统自动重判网络类型,规则就失效了。
JDBC 连接卡在 Connecting 60 秒后报 ORA-12170,不是驱动问题
ORA-12170: TNS:Connect timeout occurred 出现时,JDBC 还没走到认证阶段,DriverManager.setLoginTimeout() 完全无效。根本原因是底层 TCP 连接建立失败,卡在三次握手环节。
排查顺序必须是:
- 先确认客户端能否
telnet <db_ip> 1521(Linux/macOS 用nc -zv <db_ip> 1521)——不通,说明网络或防火墙挡住了 - 再确认服务端
lsnrctl status显示监听地址确实是对外 IP +1521,且状态为READY - 最后才看 JDBC URL,
?connectTimeout=30000对 Oracle Thin 驱动无效,别加
真正起作用的是服务端 sqlnet.ora 里的 SQLNET.INBOUND_CONNECT_TIMEOUT,默认 60 秒,可临时调到 120;但治标不治本——如果 telnet 都不通,调这个参数毫无意义。
防火墙规则看似简单,但涉及网络类型、监听绑定地址、DNS 解析、TCP 连接建立四个层面,漏掉任意一环都会导致超时。最稳妥的做法是:每改一项,立刻用 telnet 验证端口可达性,而不是等应用连上再猜。


















