ORA-12545错误本质是客户端无法解析HOST名,首要原因是hosts文件未正确配置IP与主机名映射,必须确保tnsnames.ora、listener.ora及hosts三者中HOST字段完全一致(含大小写和后缀),且hosts格式严格符合空格分隔、LF/CRLF规范,配完需flush DNS缓存并ping验证。
为什么Navicat连不上常是hosts没配对
navicat连接失败但报错里没有“connection refused”或“timeout”,而是ora-12545、空白弹窗、卡在“downloading wine-gecko…”——90%是hosts解析问题。它不报dns错误,只默默失败。
/etc/hosts 或 C:\Windows\System32\drivers\etc\hosts 必须写对格式
hosts文件不是配置DNS,而是绕过DNS的硬映射,格式错一行就整行失效。
- IP和主机名之间**只能用空格或Tab分隔**,不能用等号、冒号或中文标点
- 每行一个映射,例如:
192.168.1.100 oradb-srv(不是oradb-srv=192.168.1.100) - 注释用
#开头,且#前不能有空格,否则整行被当主机名解析 - Linux/macOS用LF换行,Windows用CRLF;混用会导致某几行静默失效(尤其复制粘贴时)
- 改完保存后,Linux/macOS无需重启Navicat,但建议执行
sudo dscacheutil -flushcache(macOS)或sudo systemd-resolve --flush-caches(新版Ubuntu)
Oracle场景下tnsnames.ora、listener.ora、hosts三者必须严格一致
ORA-12545不是网络不通,是名字根本查不到。三个地方的HOST字段必须完全相同(包括大小写、后缀、是否带域名)。
GitHub Hosts 更新工具(仅限中国用户),安全更新系统hosts文件,保留原有非GitHub条目,仅替换GitHub相关地址。支持备份恢复和风险提示。用于解决GitHub访问问题。
- 检查
tnsnames.ora里的HOST = oradb1-vip,那/etc/hosts里就得有192.168.1.101 oradb1-vip -
listener.ora中HOST = myserver.local,则tnsnames.ora和hosts也必须用myserver.local,不能简写为myserver - 重命名过机器?
listener.ora很可能还留着旧主机名,删掉旧记录或同步更新 - 验证方式:在数据库服务器上跑
lsnrctl status,看Listening Endpoints Summary里显示的地址,和Navicat连接里填的Host是否字面完全一致
Linux装Navicat时卡在wine-gecko下载,本质是SourceForge域名劫持
这不是Navicat bug,是Wine启动时硬编码直连nchc.dl.sourceforge.net,国内常被限速或污染。
- 必须往
/etc/hosts加这两行(2026年实测南非节点仍可用):155.232.191.245 nchc.dl.sourceforge.net155.232.191.245 ncu.dl.sourceforge.net - 加完立刻生效,但要删掉失败缓存:
rm -rf ~/.navicat64(注意是隐藏目录,不是~/.navicat) - 公司走透明代理?在
start_navicat脚本开头插入:export http_proxy="http://127.0.0.1:8080"(按实际代理地址改) - 别信“改DNS就能好”,hosts映射优先级高于DNS,这是唯一可靠解法
hosts文件看着简单,但Oracle的HOST、Wine的域名、Navicat连接里的主机名,三者只要有一个拼写或大小写不一致,就全盘失效。配完别急着测试,先ping一下那个主机名,看回的是不是你写的IP。










