首页 > 数据库 >Oracle 19c RAC配置基于DNS的SCAN地址解析

Oracle 19c RAC配置基于DNS的SCAN地址解析

来源:互联网 2026-07-12 08:45:12

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使其生效。

SCAN域名必须返回≥2个独立IPv4 A记录

Oracle 19c Grid Infrastructure启动时会调用getaddrinfo()对SCAN域名进行解析校验。如果仅返回1个IPv4地址,srvctl start scan会悄无声息地失败,或者srvctl status scan_listener显示监听器没有绑定所有VIP。这并非配置遗漏,而是19c的强制校验逻辑——其行为确实如此。

Oracle 19c RAC配置基于DNS的SCAN地址解析

长期稳定更新的攒劲资源: >>>点此立即查看<<<

  • DNS必须为SCAN域名(例如rac-scan.example.com)配置3个不同的A记录,比如10.10.10.2510.10.10.2610.10.10.27
  • 禁止使用CNAME:19c不递归解析CNAME,即使目标域名背后有多个A记录也无效。
  • 验证方法:执行dig rac-scan.example.com A +shortnslookup rac-scan.example.com,输出必须是3行独立IP。
  • 集群所有节点的/etc/resolv.conf必须指向同一个DNS服务器,且/etc/nsswitch.conf中的hosts:一行绝对不能将files放在dns前面。

/etc/hosts里写SCAN多IP的唯一可行写法

虽然Oracle官方不推荐使用/etc/hosts,但在没有DNS的环境(如离线测试)下,必须严格按三行独立IP来写,否则Grid仍只认一个IP。

  • 每行一个IP加域名,不能合并:
    10.10.10.25 rac-scan.example.com
    10.10.10.26 rac-scan.example.com
    10.10.10.27 rac-scan.example.com
  • 不能写成10.10.10.25 10.10.10.26 10.10.10.27 rac-scan.example.com——getaddrinfo()只会取第一个IP。
  • 修改后必须执行srvctl modify scan_listener -u刷新监听器绑定,否则新IP不会生效。
  • 注意:该写法仅在19c中有效,12c及更早版本行为完全不同。

客户端TNS或JDBC URL必须用括号语法,不能填IP

SCAN的核心价值在于解耦客户端与具体IP。如果将SCAN域名换成IP,或在URL中硬编码多个ADDRESS,都会直接绕过SCAN的负载均衡和故障转移能力——这将使配置失去意义。

  • Spring Boot的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))
  • TNSNAMES.ORA中不能写HOST=10.10.10.25,必须使用HOST=rac-scan.example.com
  • 漏掉FAILOVER=onLOAD_BALANCE=on参数,驱动默认不启用RAC特性,连接将变成单点直连。
  • Oracle JDBC驱动(ojdbc8+)仅在URL匹配@(DESCRIPTION=模式时才会触发SCAN解析逻辑。

DNS缓存和注册状态要分清

DNS解析结果变化后,Grid不会自动重新拉取,但客户端连接行为会受到两层缓存的影响:操作系统DNS缓存,以及Oracle监听器的服务注册状态。

  • 修改DNS后,建议在集群节点执行systemctl restart nscd清除本地缓存,否则可能出现nslookup返回新IP但Grid仍在使用旧结果的情况。
  • srvctl status scan仅反映SCAN VIP是否上线,并不代表实例已经注册到SCAN监听器。需要确认各节点local_listener指向本机监听器,并且remote_listener设为SCAN域名。
  • 如果客户端连通但负载不均,先执行lsnrctl services LISTENER_SCAN1,查看输出中是否有多个实例的服务名注册进来。
  • 防火墙经常被忽略:确保SCAN VIP所在网段的1521端口在所有节点的public网卡上双向开放。

实际部署中最容易卡住的点并非DNS本身,而是/etc/nsswitch.confhosts: files dns的顺序搞反了,或者srvctl modify scan_listener -u未执行。这两处一旦出错,即使DNS返回了3个IP,Grid也只会认第一个——细节决定成败。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备2026025700号-3 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。