SCAN监听未注册实例导致客户端随机连接失败,主因是remote_listener配置错误、DNS解析异常、防火墙拦截1522端口、local_listener未正确指向本节点VIP,或SCAN监听自身异常;需逐项验证注册状态、网络连通性及参数配置。
SCAN监听没注册上实例,客户端连接就随机失败
oracle 12c rac里用scan ip连接时出现ora-12514、ora-12545或“tns:listener does not currently know of sid”这类报错,八成不是网络问题,而是scan监听压根没收到实例的动态注册。实例启动后会主动向本地监听(local_listener)和scan监听(remote_listener)注册服务名,但remote_listener配置错误、dns解析失败、防火墙拦截1522端口,都会导致注册中断——此时只有部分节点能被scan发现,连接就变成“有时行、有时不行”的玄学状态。
-
remote_listener必须指向SCAN VIP的地址+端口(默认1522),不能写成主机名(除非DNS绝对可靠);典型值形如(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=scanip)(PORT=1522))) - 检查每个节点是否真在向SCAN注册:连上节点执行
lsnrctl status LISTENER_SCAN1,输出里要有类似SERVICE_NAME='orcl' ... STATUS=READY的条目;没有就说明注册失败 - DNS缓存或
/etc/hosts里SCAN条目不一致,会导致不同节点解析出不同IP,进而注册到不同SCAN监听上——所有节点的scanip必须解析为同一个VIP地址
Local_listener配置为空或错配,SCAN监听收不到服务信息
SCAN监听本身不直接管理实例,它靠local_listener把服务信息“转发”过去。如果某个节点的local_listener没设、设成空字符串、或指向了不存在的监听器,那这个节点的服务就不会出现在SCAN里,客户端轮询到它就必然失败。
- 查当前配置:
show parameter local_listener;正常应返回非空值,例如(ADDRESS=(PROTOCOL=TCP)(HOST=rac1-vip)(PORT=1521)) - 若返回空值,立刻补全:
alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=rac1-vip)(PORT=1521))' sid='orcl1';(注意sid要匹配本节点实例名) - 补完后强制注册:
alter system register;,再等10秒,立刻去SCAN监听查状态,确认服务已上线 - 别依赖“重启监听”来触发注册——
alter system register才是即时生效的正确手段
防火墙或SELinux拦了1522端口,远程注册被静默丢弃
SCAN监听运行在集群节点的1522端口(不是1521),而很多运维习惯只放开1521。结果实例能连本地监听,却无法把服务信息发给SCAN监听,日志里既无错误也无成功提示,纯静默失败。
- 在每个节点执行:
netstat -tlnp | grep :1522,确认grid用户进程正在监听 - 检查防火墙:
iptables -L -n | grep 1522或firewall-cmd --list-ports,确保1522/TCP放行 - SELinux若启用,需确认
sestatus为permissive或disabled;否则setsebool -P oracle_db_home_t 1可能不够,得加allow_oracle_connect_network布尔值 - 验证通路:从节点1用
telnet scanip 1522测试能否连通SCAN监听,不通就卡在这一步
SCAN监听自身状态异常,但crsctl不报错
crsctl stat res -t显示ora.scan1.vip和ora.LISTENER_SCAN1.lsnr都是ONLINE,不代表监听器真在工作。有可能监听进程僵死、日志写满、或监听配置文件($GRID_HOME/network/admin/listener.ora)被意外修改过。
- 直接看监听日志:
tail -f $GRID_HOME/log/hostname/client/listener_scan1.log,关注是否有TNS-12545、WARNING: Failed to auto-start类记录 - 手动重启SCAN监听比重启整个CRS稳妥:
srvctl stop scan_listener→srvctl start scan_listener - 重启后立刻执行
lsnrctl status LISTENER_SCAN1,重点核对Listening Endpoints Summary...里的IP是否是SCAN VIP,不是物理IP - 如果监听日志反复刷
Failed to open log file,说明$GRID_HOME/log磁盘满或权限不对,chown -R grid:oinstall $GRID_HOME/log可解
remote_listener和local_listener的配合关系——它们不是独立配置项,而是一对协作组件。只要其中一环断开,SCAN就收不到服务,连接失败就是随机的、不可预测的。


















