当前位置: 首页
数据库
Oracle 19c RAC基于DNS的SCAN地址解析配置方法

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

热心网友 时间:2026-07-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,输出必须是三行独立 IP 地址
  • 集群所有节点的 /etc/resolv.conf 必须指向同一个 DNS 服务器,而且 /etc/nsswitch.confhosts: 这一行绝对不能把 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 返回了三个 IP,Grid 也只会认第一个——细节决定成败。

来源:https://www.php.cn/faq/2785035.html

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
SQL Server多用户并发INSERT幻读解决方案

SQL Server多用户并发INSERT幻读解决方案

SQLServer中幻读源于“先查后插”业务的间隙漏洞,SERIALIZABLE隔离级别不能覆盖多语句操作且依赖索引。真正解决需将“读-判-写”绑定为原子动作,如使用MERGE语句、唯一索引加错误捕获或UPDLOCK加HOLDLOCK手动锁范围,并确保查询走索引及显式开启事务。

时间:2026-07-12 07:09
Django项目利用安全库规避SQL注入的方法

Django项目利用安全库规避SQL注入的方法

DjangoORM仅对值参数化,字段名等结构参数需白名单校验。filter()动态字段名、raw()和extra()参数化、RawSQL中LIKE手动转义及ORDERBY等结构字段均为注入风险点,需严格规避用户直接控制。

时间:2026-07-12 07:08
SQL分组统计状态变更次数的方法

SQL分组统计状态变更次数的方法

通过LAG()窗口函数对比相邻行状态变化并计数,是统计分组内状态改变次数的核心方法。需严格按业务逻辑排序、正确分区,并处理NULL边界。旧版MySQL可考虑导出数据用脚本处理。性能优化需建立复合索引,避免函数影响。状态定义需明确连续相同值过滤等陷阱。

时间:2026-07-12 07:08
MySQL数据排序的原理与实现步骤

MySQL数据排序的原理与实现步骤

MySQL排序采用文件排序或索引排序,数据量大时使用合并排序。内存排序由sort_buffer_size控制,超限则转磁盘临时表。索引排序效率高,覆盖索引可避免回表。通过EXPLAIN可分析是否使用索引、临时表或文件排序,据此优化性能。

时间:2026-07-12 07:08
如何定位MySQL撤销日志页锁定导致的检查点延迟

如何定位MySQL撤销日志页锁定导致的检查点延迟

UndoLog页被锁定本身不直接导致CheckPoint延迟,根因是长事务阻塞purge线程导致undo记录无法清理。通过Historylistlength超万且增长、PURGEPROCESSED停滞、事务ID与清理ID差距扩大可判断。定位需查最老活跃事务及其undo段与purge线程状态。

时间:2026-07-12 07:08
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 热门数据榜