scan连不上本质是解析路径错误:/etc/hosts仅认首行ip(不轮询),nsswitch.conf需设为“hosts: files dns”且禁用[notfound=return],否则oracle客户端无法解析scan域名。
scan ip 连不上,不是“连不上”,而是根本没走对解析路径——oracle 安装器和客户端都依赖系统级 resolver 行为,一旦 /etc/hosts 或 nsswitch.conf 配错,rac-scan.example.com 就压根解析不出真实 ip,后续所有连接(包括 tnsping、sqlplus)都会失败。
SCAN 名称在 hosts 中写多行就失效
Linux 上用 /etc/hosts 模拟 DNS 时,Oracle 只认第一行匹配的 IP。哪怕你写了三行:
192.168.10.50 rac-scan.example.com 192.168.10.51 rac-scan.example.com 192.168.10.52 rac-scan.example.com
实际生效的只有 192.168.10.50;其余两行被忽略,且不会轮询。官方明确说明:hosts 文件不支持 SCAN 多地址负载分发。
- 必须确保所有节点的
/etc/hosts中rac-scan.example.com只出现一次,且指向你真正想测试的那个 SCAN VIP - 删掉任何形如
127.0.0.1 rac-scan.example.com的本地回环映射——这会导致本节点ping通、跨节点ping不通 - 验证方式:在任意节点执行
getent hosts rac-scan.example.com,输出必须是单行、真实 IP、无空格或制表符
nslookup 快但 tnsping 慢?查 nsswitch.conf 的 hosts 行
nslookup 直连 DNS server,绕过系统 resolver 链路;而 Oracle 客户端(包括安装器)调用的是 getaddrinfo(),完全受 /etc/nsswitch.conf 控制。常见错误配置:
hosts: files mdns4_minimal [NOTFOUND=return] dns
这段配置会让系统在 files(即 /etc/hosts)查不到时直接返回失败,根本不查 dns。RAC 要求必须走 DNS 解析 SCAN,所以必须改成:
GitHub Hosts 更新工具(仅限中国用户),安全更新系统hosts文件,保留原有非GitHub条目,仅替换GitHub相关地址。支持备份恢复和风险提示。用于解决GitHub访问问题。
hosts: files dns
- 所有节点的
/etc/nsswitch.conf中hosts:行必须一致,且不能含mdns4_minimal、[NOTFOUND=return]等条件跳转逻辑 - 改完后运行
nscd -i hosts清缓存(如果启用了nscd) - 用
getent hosts rac-scan.example.com再试一次——这才是 Oracle 真正看到的结果
防火墙拦了 1522 端口,tnsping 就卡住不动
Oracle 12c+ 的 LISTENER_SCAN1 默认监听 TCP 1522,不是传统 1521。很多环境只开了 1521,导致 tnsping rac-scan.example.com 表现为“超时”或“TNS-12535”,实则是连接被静默丢弃。
- 临时验证:在节点上执行
sudo firewall-cmd --permanent --add-port=1522/tcp,再sudo firewall-cmd --reload - 别忘了 ICMP:若需
ping扫描 IP,还得加sudo firewall-cmd --permanent --add-icmp-block=echo-request - 检查当前生效 zone:
firewall-cmd --get-active-zones,确保规则加在public(或其他实际使用的 zone)下 - 替代验证法:不用
ping,改用nc -zv rac-scan.example.com 1522,看是否能建立 TCP 连接
SCAN 监听器起来了,但实例没注册进去
能 tnsping 通、能 lsnrctl status LISTENER_SCAN1 看到监听器,不代表数据库服务已注册。常见原因是 remote_listener 参数为空或指向错误。
- 登录任意实例执行:
show parameter remote_listener—— 正常值应为rac-scan.example.com:1522(注意端口) - 若为空,执行:
alter system set remote_listener='rac-scan.example.com:1522' scope=both; - 再查监听器状态:
lsnrctl status LISTENER_SCAN1,确认输出里有Services Summary且列出你的数据库 service name - 注册延迟存在:修改参数后可能需 30–60 秒才完成动态注册,别立刻重试
真正的难点不在“怎么配”,而在“哪一层断了”。getent 出 IP 但 tnsping 不通?看防火墙和 remote_listener。getent 都慢?回溯 nsswitch.conf 和 resolv.conf。最隐蔽的坑永远藏在 /etc/hosts 里那行多余的 127.0.0.1 或一个被遗忘的 IPv6 条目。










