Oracle 19c强制要求SCAN域名解析出≥2个互不相同的IPv4 A记录,否则srvctl start scan静默失败;必须DNS返回独立A记录(非CNAME或重复IP),tnsnames.ora需用ADDRESS_LIST显式列出全部SCAN地址并设LOAD_BALANCE=on,JDBC须用ojdbc8+且URL含loadBalance=true&failover=true。

SCAN域名必须返回≥2个独立IPv4 A记录
Oracle 19c强制要求rac-scan.example.com这类SCAN域名在DNS查询时返回至少两个互不相同的IPv4地址,只返回一个IP会导致srvctl start scan静默失败,或srvctl status scan_listener显示监听器未绑定全部VIP。这不是配置建议,而是Grid Infrastructure启动时调用getaddrinfo()做的硬校验——它必须拿到≥2个AF_INET地址才继续。
常见错误包括:
-
/etc/hosts里写三行相同IP(如全填10.10.10.25)→ 无效,必须是三个不同IP - DNS返回CNAME → 19c不递归解析,只认最终A记录
-
/etc/nsswitch.conf中hosts: files dns但files排在dns前 → 优先查/etc/hosts,绕过DNS
验证命令:nslookup rac-scan.example.com或dig rac-scan.example.com A +short,输出必须是三行独立IPv4地址(如10.10.10.25、10.10.10.26、10.10.10.27)。
tnsnames.ora里必须显式列出全部SCAN地址+LOAD_BALANCE=on
Oracle客户端(含JDBC Thin)不会自动DNS轮询,它只按你在tnsnames.ora里写的顺序连接。哪怕DNS返回3个IP,如果你只写了一个ADDRESS,连接就永远打到第一个节点。
正确结构必须满足三项:
-
ADDRESS_LIST包裹全部3个ADDRESS,不能拆成3个独立DESCRIPTION -
LOAD_BALANCE = on(小写on,写成yes、true或ON均被静默忽略) -
HOST字段填DNS可解析的SCAN域名(如rac-scan1.example.com),不能填IP或VIP
示例:
(ORCL_SCAN = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan1.example.com)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan2.example.com)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan3.example.com)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl)) (LOAD_BALANCE = on) ) )
JDBC URL必须用(DESCRIPTION=)包裹且带loadBalance=true
写成jdbc:oracle:thin:@rac-scan.example.com:1521:ORCLCDB这种单机格式,驱动直接当普通库处理,不会解析SCAN、不会触发负载均衡,DataSource初始化失败且静默返回null。
整个连接串必须包裹在@(DESCRIPTION=)内,不能外层加引号、空格或换行;ADDRESS、CONNECT_DATA、FAILOVER等关键字大小写敏感,漏一个右括号、多一个等号、HOST值DNS不可解析,都会导致URL无效且无明确报错。
必须使用ojdbc8+驱动,并显式启用:loadBalance=true&failover=true。仅靠tnsnames.ora里的LOAD_BALANCE = on对Java应用无效。
集群节点的DNS解析路径必须正确
/etc/resolv.conf必须指向能返回多A记录的DNS服务器;/etc/nsswitch.conf中hosts:行必须包含dns,且不能把files放在dns前面。否则即使DNS配对了,节点仍会优先查/etc/hosts,导致SCAN解析失败。
修改DNS后无需重启服务,Grid会在下次srvctl start scan时自动拉取新记录;但建议执行systemctl restart nscd清除本地DNS缓存。
注意:SCAN是协议层负载入口,不是别名;驱动靠DNS返回多个A记录做轮询,硬编码多个ADDRESS反而干扰行为;HOST值必须是可被Spring Boot所在服务器解析的SCAN域名,不能是节点VIP或IP。


















