Oracle不推荐用/etc/hosts配SCAN,因校验要求DNS与hosts解析一致,而hosts仅支持单IP映射,易触发PRVF-4664和PRVF-4657;若强制使用,须确保SCAN名唯一、不指向127.0.0.1、IP真实可达,并手动设置remote_listener及执行alter system register。
为什么/etc/hosts里配SCAN会报PRVF-4664和PRVF-4657
oracle 11g rac安装时校验scan名称解析,会检查dns与本地/etc/hosts是否一致。若只在/etc/hosts中配置了scan条目(比如192.168.10.65 rac-scan),但系统默认走dns查询且未返回该记录,就会触发prvf-4664(不一致解析)和prvf-4657(解析失败)。这不是配置错误,而是校验逻辑过于严格——它要求所有解析路径结果必须完全相同。
在hosts中临时绑定SCAN的正确写法
临时测试阶段可用/etc/hosts,但必须满足三个硬性条件,否则监听注册或客户端连接会失败:
- SCAN名称必须**全局唯一**:所有节点
/etc/hosts中,同一SCAN名只能映射**一个IP**(Oracle不支持hosts文件模拟多SCAN IP轮询) - 不能将SCAN名指向
127.0.0.1或localhost,否则lsnrctl status LISTENER_SCAN1会显示The listener supports no services - SCAN IP必须是**集群网络段内真实可达的地址**,且未被其他服务占用;建议用
ping -c 3 192.168.10.65和telnet 192.168.10.65 1521双验证
示例正确条目:192.168.10.65 rac-scan
错误条目:127.0.0.1 rac-scan 或 192.168.10.65 rac-scan rac-scan-priv
忽略校验错误后必须补的操作
即使勾选忽略安装界面的SCAN错误,仍需手动完成两件事,否则客户端用SCAN IP连库必报ORA-12514或ORA-12545:
- 确认
remote_listener参数已设为SCAN名称(不是IP):alter system set remote_listener='rac-scan:1521' scope=both; - 执行
alter system register;强制实例向SCAN监听器注册服务;缺这步会导致lsnrctl status LISTENER_SCAN1中The listener supports no services - 检查
local_listener仍指向本节点VIP(如(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xk1-vip)(PORT=1521)))),**绝不能改成SCAN IP**,否则VIP连接会失效
客户端连SCAN失败时优先查什么
当PL/SQL Developer等工具报ORA-12545,别急着改数据库端——先确认客户端自身环境:
- Windows客户端必须在
C:\Windows\System32\drivers\etc\hosts里添加SCAN映射(仅配服务端/etc/hosts无效) - tnsnames.ora中
HOST字段填SCAN名(如rac-scan),**不能填SCAN IP**;否则绕过SCAN负载均衡机制 - 禁用客户端防火墙临时测试,某些安全软件会拦截对非标准域名(如
rac-scan)的DNS请求,即使你用了hosts
真正麻烦的从来不是配置本身,而是误以为“配了hosts就等于全链路打通”——SCAN依赖集群ware、监听器、实例参数、客户端解析四层协同,漏掉任意一层,表现都是“连不上”。


















