srvctl status scan_listener显示UNKNOWN表示CRS资源层与监听进程脱节,需查oraagent_grid.log、验证VIP绑定状态、清理残留进程并重启监听器,再确认端口绑定和remote_listener配置。

SCAN异常不是监听器挂了,而是GI资源层与网络/解析层脱节——90%的情况重启监听或重配tnsnames都无效,必须从VIP绑定、DNS响应、remote_listener三者交叉验证入手。
srvctl status scan_listener 显示 UNKNOWN 怎么办
这表示 CRS 能看到资源注册,但 oraagent_grid 无法确认进程真实存活。不是“没启动”,而是 IPC 或共享内存卡死。
- 先查
$GRID_HOME/log/<node>/agent/oraagent_grid.log,搜索Failed to bind address或TNS-12560 - 确认 SCAN VIP 是否真在本节点:用
srvctl config scan查 IP,再用ip addr show看该 VIP 是否作为 secondary 地址出现在 public 网卡上(如ens33) - 若 VIP 在本节点且
ps -ef | grep LISTENER_SCAN1有残留进程,用kill -9 <pid>清掉,再执行srvctl start scan_listener -i 1 - 启动后立刻验证:
lsnrctl status LISTENER_SCAN1必须在Listening Endpoints Summary段中看到(PROTOCOL=tcp)(HOST=)(PORT=1521)—— 缺少HOST值说明绑定失败
客户端连 SCAN 报 ORA-12545 或 TNS-12514 怎么定位
这不是网络不通,而是注册链断了:数据库实例没把服务信息推给 SCAN 监听器。
- 检查每个实例的
remote_listener参数:show parameter remote_listener,值必须是<scan_name>:1521(不能是 IP,不能漏端口,不能指向节点 VIP) - 确认
local_listener已正确设置(通常为本节点 VIP + 端口),否则实例连本地监听都注册不了,更不会转发到 SCAN - 在任意节点执行
lsnrctl status LISTENER_SCAN1,看Services Summary下是否有你的 service name;若显示Service "ORCL" has 0 instance(s),说明注册未发生 - 临时触发注册:
alter system register,再等 10 秒重查状态;若仍无,检查防火墙是否放行 1521/tcp(注册走的是 TCP,不是 UDP)
nslookup rac-scan 返回 3 个 IP,但客户端只连第一个怎么办
Oracle 客户端根本不做 DNS 轮询,它只按你写的顺序连 —— 所谓“SCAN 负载均衡”全靠你手动配置驱动。
-
tnsnames.ora中必须显式写出全部 3 个 SCAN 地址,且包在同一个ADDRESS_LIST内,LOAD_BALANCE = on(小写on,写yes或ON静默失效) - HOST 字段必须填可被 DNS 解析的 SCAN 域名(如
rac-scan1.example.com),不能填 IP,也不能是 CNAME 别名 - JDBC 连接 URL 必须显式加
loadBalance=true&failover=true(仅 ojdbc8+ 支持);JVM 启动时加-Dsun.net.inetaddr.ttl=0禁用 DNS 缓存 - 检查
sqlnet.ora中NAME.DIRECTORY_PATH是否包含TNSNAMES,且不能被EZCONNECT排在前面,否则直接跳过 tnsnames 解析
修改 SCAN IP 后 LISTENER_SCAN1 不监听新地址
GI 资源没重载网络配置,LREG 进程还在往旧 VIP 发注册请求,形成“注册黑洞”。
- 执行
srvctl config scan,确认输出是新 IP;若仍是旧 IP,先srvctl stop scan,再srvctl start scan - 检查 GI 网络资源:
crsctl stat res ora.scan1.vip -p | grep USR_ORA_VIP,输出必须是新地址;若不是,需srvctl modify scan -n <new_scan_name>并重载 - DNS 必须返回 ≥2 个独立 IPv4 A 记录(19c 强制校验),
/etc/hosts中写单 IP 会静默失败;nslookup rac-scan必须看到三行Address: - 所有数据库实例必须重启,或至少执行
alter system set remote_listener='rac-scan:1521' scope=both+alter system register,否则 LREG 仍用旧值
SCAN 的“透明性”是假象,它高度依赖 DNS 响应一致性、GI 资源状态同步、以及客户端配置的精确性。最容易被忽略的是:DNS 负向缓存会让客户端数小时内持续解析失败,而 crsctl stat res -t 看起来完全正常。


















