scan监听显示unknown或启动失败,本质是crs资源层与scan vip绑定脱节,须交叉验证dns解析(3个独立a记录)、vip归属、端口占用(ss -tuln src :1521)及ocr状态。

单节点 SCAN 监听显示 UNKNOWN 或启动失败,不是监听进程没起来,而是 CRS 资源层与 SCAN VIP 绑定脱节——90% 的 case 重启监听、重配 tnsnames 都无效,必须从 DNS 解析、VIP 归属、端口占用、OCR 状态四点交叉验证。
srvctl status scan_listener 显示 UNKNOWN 怎么办
这表示 CRS 认为资源已注册,但 oraagent_grid 无法通过 IPC 确认监听器真实存活。不是“没启动”,而是共享内存或 socket 卡死。
- 立刻查日志:
$GRID_HOME/log/<node>/agent/oraagent_grid.log</node>,搜索Failed to bind address或TNS-12560 - 确认 SCAN VIP 是否真在本节点:用
srvctl config scan查出三个 SCAN IP,再用ip addr show看该 IP 是否作为 secondary 地址出现在 public 网卡(如ens33)上 - 若 VIP 在本节点且
ps -ef | grep LISTENER_SCAN1有残留进程,先kill -9 <pid></pid>清掉,再执行srvctl start scan_listener -i 1 - 启动后立刻跑
lsnrctl status LISTENER_SCAN1,重点看Listening Endpoints Summary段:必须出现(HOST=)(PORT=1521)—— 缺失HOST值说明绑定失败
nslookup rac-scan 只返回一个 IP 或 CNAME
Oracle 19c 强制校验 getaddrinfo() 结果,只返回 1 个 A 记录或 CNAME 就直接拒绝启动,srvctl start scan 会静默失败,srvctl status scan 可能报 CRS-2674。
- 在任意节点执行
nslookup rac-scan.example.com,输出必须含且仅含 3 行独立 IPv4A记录,IP 必须全部属于 SCAN 网段 - 禁用
/etc/hosts中所有 SCAN 相关条目——RAC 节点间通信绕过 hosts,会导致部分节点解析成功、部分失败 - 检查 SRV 记录:
dig +short _scan._tcp.rac-scan.example.com SRV,必须返回0 5 1521 rac-scan.example.com.(端口必须是 1521) - 若用 GNS,先确保
crsctl stat res -t | grep gns是ONLINE,否则先srvctl start gns
SCAN VIP 所在节点上 1521 端口被占用了
SCAN 监听器绑定的是 SCAN VIP(不是节点 VIP),默认端口 1521。常见错误是只查全局端口占用,漏掉 VIP 级别冲突。
- 先确认 VIP 归属:
srvctl config scan记下 SCAN VIP,再用ip addr show确认当前哪个节点持有它(SCAN VIP 浮动) - 在持有 VIP 的节点上,精确检查:
ss -tuln src <scan_vip>:1521</scan_vip>(例如ss -tuln src 192.168.10.101:1521) - 比
netstat更准的是lsof -i @<scan_vip>:1521</scan_vip>,能抓到 docker 容器、遗留tnslsnr进程、DBaaS 平台预占端口 - 即使
ps -ef | grep tnslsnr无输出,也可能因防火墙DROP后 socket 处于TIME_WAIT但端口未释放;临时缓解:echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
remote_listener 指向失效或实例未注册进 SCAN
客户端连 SCAN 报 ORA-12545 或 TNS-12514,不是网络不通,而是注册链断了:数据库实例根本没把服务信息推给 SCAN 监听器。
- 检查每个实例的
remote_listener参数:show parameter remote_listener,值必须是<scan_name>:1521</scan_name>(不能是 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)
真正难排查的点,往往藏在 DNS 负向缓存、ARP 冲突、OCR 中 SCAN 元数据丢失这些地方——比如 nslookup 在节点上正常,但应用服务器上只返回一个 IP,大概率是递归 DNS 缓存了 NXDOMAIN;又比如 ip addr show 显示 SCAN VIP 存在但标记为 DUP,说明局域网内已有设备响应这个地址,而 CRS 日志里不会明说。











