Oracle19cRAC环境中,SCAN域名必须解析为2至3个不同的IPv4地址,否则启动命令会失败或监听器注册异常。官方推荐使用DNS配置三个A记录,并确保网络设置优先查询DNS。若使用/etc/hosts文件,则需分三行分别列出不同IP与域名,且所有节点文件一致。配置后必须执行srvctlmodifyscan_listener-u命令强制刷新,并重启相关
Oracle 19c SCAN IP配置指南:DNS与Hosts映射方法详解
时间:2026-05-08
浏览:422
文章目录
在Oracle 19c RAC环境中,SCAN域名必须解析出2到3个不同的IPv4地址,这是一个硬性要求。如果你只在DNS或/etc/hosts中配置了一个IP,那么srvctl start scan命令很可能会失败,或者导致SCAN监听器注册异常。这并非一个可选的优化建议,而是19c版本中强制执行的校验逻辑。

为什么单 SCAN IP 在 19c 会失败
问题的根源在于,19c的Grid Infrastructure在安装和启动阶段,会主动调用getaddrinfo()函数来验证SCAN域名的解析结果。如果这个函数只返回一个IPv4地址,那么后续的启动流程就会出问题。
你可能会遇到两种典型的错误现象:一种是执行srvctl start scan后,日志卡在CRS-2672: Attempting to start 'ora.LISTENER_SCAN1.lsnr'这一步,然后就没有下文了;另一种是srvctl config scan显示只有一个SCAN VIP,但用ifconfig命令查看,却发现这个IP并没有实际绑定到任何网卡上。
这背后的设计原理很清晰:SCAN监听器天生就是为负载分发和故障转移而生的,它依赖多个IP地址来工作。只提供一个IP,等于破坏了它的运行基础。所以,这根本不是权限或路径问题,而是架构上的强制约束。
这里还有一个常见的误区:有人试图在/etc/hosts里用三行重复的“域名→相同IP”来蒙混过关。这种做法是无效的。校验机制要求的是三个不同的IPv4地址,重复的地址会被视为一个。
DNS 方式:配置 SCAN 域名返回 3 个 A 记录
使用DNS是Oracle官方唯一推荐的方式。配置的关键,不在于“能不能配”,而在于“怎么配才能被Grid正确识别”。
首先,你需要确保DNS服务器能正确响应。用dig scan.example.com A +short或nslookup scan.example.com命令测试一下,它应该返回三行不同的IPv4地址,比如10.10.10.25、10.10.10.26、10.10.10.27。返回的顺序并不重要。
其次,集群所有节点的网络配置必须指向这个DNS。检查/etc/resolv.conf文件,确认DNS服务器设置正确。更重要的是/etc/nsswitch.conf文件,其中hosts:这一行必须包含dns,并且不能把files放在dns前面。如果files在前,系统会优先查询/etc/hosts,你的DNS配置就白费了。
修改DNS记录后,通常不需要重启集群服务,Grid会在下次执行srvctl start scan时自动获取新的记录。不过,稳妥起见,建议在各个节点上执行systemctl restart nscd命令,以清除本地的DNS缓存。
最后提醒一点:不要使用CNAME记录。19c的解析逻辑不会递归解析CNAME,它只认最终的A记录。
/etc/hosts 方式:强行支持多 IP 的唯一可行写法
虽然Oracle明确不推荐在生产环境使用/etc/hosts,但在一些测试或封闭环境中,这可能是唯一的选择。如果你必须走这条路,那么下面这种写法是19c中唯一有效的格式:
- 所有节点的
/etc/hosts文件内容必须完全一致。 - 必须分三行书写,每行只能有一个IP地址对应一个域名,像这样:
10.10.10.25 scan.example.com 10.10.10.26 scan.example.com 10.10.10.27 scan.example.com
绝对不能写成10.10.10.25 10.10.10.26 10.10.10.27 scan.example.com这种单行多IP的格式。因为底层glibc库的gethostbyname()函数不支持这种写法。
同时,你需要确保/etc/nsswitch.conf中hosts:行只有files,没有dns,否则系统可能会跳过/etc/hosts去查询DNS。
文件修改完成后,同样需要刷新缓存,执行systemctl restart nscd或killall -USR2 nscd命令即可。
配置后必须执行的刷新动作
无论你采用DNS还是/etc/hosts的方式,修改完IP配置后,都必须执行一个关键的刷新步骤,否则新的IP地址不会生效。
完整的操作序列如下:
- 先停止相关服务:
srvctl stop scan_listener和srvctl stop scan。 - 执行强制刷新命令:
srvctl modify scan_listener -u。这一步至关重要,它的作用是命令SCAN监听器重新读取DNS或/etc/hosts,并将所有解析到的IP地址绑定到对应的网卡上。 - 最后启动服务:
srvctl start scan和srvctl start scan_listener。
完成后,务必进行验证:
- 运行
srvctl config scan,应该能看到3个SCAN VIP。 - 运行
ifconfig | grep -A1 “10.10.10.2[567]”,确认这些IP地址已经成功绑定到了如enp0s3这样的网络接口上。
很多问题就出在忽略了srvctl modify scan_listener -u这一步。这个命令不会改变SCAN的名称或网络定义,它唯一的功能就是强制监听器重新加载地址列表。如果没有这一步,即使你的DNS或/etc/hosts配置得再正确,SCAN监听器也只会傻傻地监听它最初启动时发现的那一个IP地址。
实用工具推荐
绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
选择画质和输出格式,预览压缩前后的大小。