Oracle19cRAC强制SCAN域名至少解析出2个独立IPv4A记录,建议配置3个并禁用CNAME。修改后执行`srvctlmodifyscan_listener-u`生效。`/etc/hosts`每行一个IP加域名,客户端连接必须使用域名。
Oracle 19c RAC环境强制要求SCAN域名必须解析出至少2个独立的IPv4 A记录,否则srvctl start scan会静默失败,或者SCAN监听器无法完整绑定。稳妥的做法是配置3个不同的A记录,同时禁用CNAME,最后执行srvctl modify scan_listener -u使其生效。
Oracle 19c Grid Infrastructure启动时会调用getaddrinfo()对SCAN域名进行解析校验。如果仅返回1个IPv4地址,srvctl start scan会悄无声息地失败,或者srvctl status scan_listener显示监听器没有绑定所有VIP。这并非配置遗漏,而是19c的强制校验逻辑——其行为确实如此。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
rac-scan.example.com)配置3个不同的A记录,比如10.10.10.25、10.10.10.26、10.10.10.27。dig rac-scan.example.com A +short或nslookup rac-scan.example.com,输出必须是3行独立IP。/etc/resolv.conf必须指向同一个DNS服务器,且/etc/nsswitch.conf中的hosts:一行绝对不能将files放在dns前面。虽然Oracle官方不推荐使用/etc/hosts,但在没有DNS的环境(如离线测试)下,必须严格按三行独立IP来写,否则Grid仍只认一个IP。
10.10.10.25 rac-scan.example.com10.10.10.26 rac-scan.example.com10.10.10.27 rac-scan.example.com10.10.10.25 10.10.10.26 10.10.10.27 rac-scan.example.com——getaddrinfo()只会取第一个IP。srvctl modify scan_listener -u刷新监听器绑定,否则新IP不会生效。SCAN的核心价值在于解耦客户端与具体IP。如果将SCAN域名换成IP,或在URL中硬编码多个ADDRESS,都会直接绕过SCAN的负载均衡和故障转移能力——这将使配置失去意义。
spring.datasource.url必须以@(DESCRIPTION=开头,例如:jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac-scan.example.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCLCDB))(FAILOVER=on)(LOAD_BALANCE=on))HOST=10.10.10.25,必须使用HOST=rac-scan.example.com。FAILOVER=on或LOAD_BALANCE=on参数,驱动默认不启用RAC特性,连接将变成单点直连。@(DESCRIPTION=模式时才会触发SCAN解析逻辑。DNS解析结果变化后,Grid不会自动重新拉取,但客户端连接行为会受到两层缓存的影响:操作系统DNS缓存,以及Oracle监听器的服务注册状态。
systemctl restart nscd清除本地缓存,否则可能出现nslookup返回新IP但Grid仍在使用旧结果的情况。srvctl status scan仅反映SCAN VIP是否上线,并不代表实例已经注册到SCAN监听器。需要确认各节点local_listener指向本机监听器,并且remote_listener设为SCAN域名。lsnrctl services LISTENER_SCAN1,查看输出中是否有多个实例的服务名注册进来。1521端口在所有节点的public网卡上双向开放。实际部署中最容易卡住的点并非DNS本身,而是/etc/nsswitch.conf中hosts: files dns的顺序搞反了,或者srvctl modify scan_listener -u未执行。这两处一旦出错,即使DNS返回了3个IP,Grid也只会认第一个——细节决定成败。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述