Standby不能配置SCAN IP监听器,因SCAN是RAC集群专属机制,依赖GI动态管理,Standby侧无OCR资源、srvctl不识别,强行配置将导致监听失败或连接异常。

Oracle 19c RAC Data Guard 中不能、也不应为 Standby 配置 SCAN IP 监听器。 SCAN 是 RAC 集群专属机制,仅在 Primary(RAC)侧存在并起作用;Standby(无论 RAC 或单实例)不参与 SCAN 架构,强行配置会导致 CRS 资源注册失败、监听器无法启动或客户端连接异常。
为什么 Standby 不能配 SCAN
SCAN 的设计前提依赖于 Oracle Clusterware 的动态资源管理能力:多个 SCAN VIP 必须由 GI 自动分配、绑定到网卡、并通过 srvctl 生命周期管理。而 Data Guard 的 Standby 实例(即使是 RAC Standby)在物理上不运行 SCAN Listener 资源——srvctl config scan 在 Standby 节点执行会报错或返回空,ora.LISTENER_SCAN1.lsnr 资源根本不存在于 Standby 的 OCR 中。
常见误操作包括:
- 在 Standby 节点的
/etc/hosts或 DNS 中为 Standby 域名添加 SCAN 条目 → GI 启动时校验失败,srvctl start scan_listener静默退出 - 手动在 Standby 上用
netca或listener.ora配一个叫LISTENER_SCAN1的监听器 → 不被 CRS 管理,端口可能被抢占,且无法注册实例服务 - 把 Standby 的
remote_listener指向某个 SCAN 名称 → 实例启动时报 ORA-00119、ORA-00132,因为该 SCAN 名称在 Standby 侧不可解析或无对应监听进程
Data Guard 连接中 SCAN 的真实作用位置
SCAN 只在 Primary RAC 侧生效,用于客户端连接 Primary 的负载均衡与故障转移。Data Guard 的日志传输(LGWR/ARCH)、重做应用(MRP)、以及 Switchover/Failover 操作本身,完全不经过 SCAN —— 它们走的是数据库参数中显式配置的网络路径:
-
LOG_ARCHIVE_DEST_2中的SERVICE=standby_tns_alias→ 必须指向 Standby 的**本地监听器 TNS 别名**(如STBY),不是 SCAN 名称 -
DB_UNIQUE_NAME和STATIC_CONNECT_IDENTIFIER在srvctl config database -d输出中体现,也必须基于 Standby 的 VIP 或主机名 + 端口 - 客户端连 Standby 做只读查询或验证,TNS 配置里写的是 Standby 的 VIP 列表或单实例主机名,不是 SCAN
示例错误 TNS 配置(Standby 侧):(STBY = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = stby-scan.example.com)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = stby))) )
这个配置会让客户端试图连一个根本不存在的 SCAN 监听器,必然超时。
Standby 正确监听配置要点
Standby(含 RAC Standby)只需标准本地监听器,重点在于确保它能被 Primary 识别、且支持 ADG 实时查询:
- 监听端口必须与
LOG_ARCHIVE_DEST_2中 SERVICE 所用端口一致(默认 1521,但可自定义) - 若 Standby 是 RAC,每个节点的
local_listener必须设成本机 VIP + 端口,remote_listener**留空或注释掉**(Standby 不向外提供服务注册) - Standby 的
tnsnames.ora中,Primary 的连接串(用于 Switchover 前校验)应使用 Primary 的 SCAN 名称 —— 但这是 Primary 的 SCAN,不是 Standby 自己配的 - 验证命令:
lsnrctl status LISTENER(看是否 READY),tnsping STBY(从 Primary 节点执行),SELECT STATUS FROM V$INSTANCE(确认 MRP 是否 running)
跨网段 DG 日志传输需绕过 SCAN 的典型场景
当 Primary RAC 和 Standby 分属不同子网(如 Primary 走 192.168.10.0/24,Standby 走 10.1.0.0/24),有人试图用 SCAN2 绑定 Standby 网络 —— 这是无效的。SCAN2 是为 Primary RAC 内部多网段流量(如集群私网通信、ADG 日志拉取)设计的,不是为 Standby 对外暴露服务。
正确做法是:
- Primary 的
LOG_ARCHIVE_DEST_2显式指定 Standby 的**某一个 VIP 或主机名**(非 SCAN),例如:SERVICE="stby-node1-vip:1521" - 防火墙放通 Primary → Standby 单向 1521 端口(或自定义端口)
- Standby 网络侧 DNS 或
/etc/hosts中,确保 Primary SCAN 名称(如rac-scan.example.com)可解析(仅用于 Switchover 时反向连接)
真正容易被忽略的是:Standby 的监听器日志($ORACLE_HOME/network/log/listener.log)里一旦出现 TNS-12535 或反复 Connecting to (ADDRESS=(...)) 却无后续,大概率是监听器没起来,或者 LOG_ARCHIVE_DEST_2 指向了错误的主机名或端口 —— 此时查 SCAN 没有任何意义。


















