如何确认SCAN Listener是否已经真正监听新的IP地址?需要检查lsnrctl status LISTENER_SCAN1命令输出中Listening Endpoints Summary里的IP是否已经变成新的SCAN地址。如果依然显示旧IP,就说明GI还没有同步DNS变更。此时可以执行srvctl stop scan + srvctl start scan,或者使用srvctl modify scan -n rac-scan刷新配置,随后再核对srvctl config scan、nslookup rac-scan以及crsctl stat res -t | grep scan的结果是否一致。

确认SCAN Listener是否真正监听新IP
在Oracle RAC环境中,ORA-12514报错通常与SCAN IP变更后服务注册未及时更新有关。首先执行lsnrctl status LISTENER_SCAN1(也可以检查LISTENER_SCAN2等)命令,重点查看输出里的Listening Endpoints Summary部分,确认其中的IP是否已经是新的SCAN地址。如果这里仍显示旧IP(例如192.168.10.101:1521),通常说明GI尚未完成DNS变更同步。
接着验证DNS解析是否正确:执行nslookup rac-scan(替换成你的实际SCAN名称),确认返回的是新的IP地址;再检查GI网络资源配置:srvctl config scan。如果该命令输出的仍然是旧IP,就需要手动刷新GI网络配置:
- 执行
srvctl stop scan+srvctl start scan - 或者更彻底地使用
srvctl modify scan -n rac-scan(强制触发DNS重新解析) - 再通过
crsctl stat res -t | grep scan检查,确认所有ora.scan*.vip状态均为ONLINE
检查REMOTE_LISTENER参数是否指向当前SCAN
RAC实例通过REMOTE_LISTENER参数决定向哪个SCAN Listener注册数据库服务。如果该参数仍然指向旧的SCAN名称或旧IP,LREG进程就会持续向错误地址发送注册请求,最终导致服务看似已注册但实际无法正常响应。
登录任意一个数据库节点后,执行:
SELECT value FROM v$parameter WHERE name = 'remote_listener';
如果返回结果不是当前使用的SCAN全名(例如rac-scan:1521),应立即修正:
ALTER SYSTEM SET remote_listener='rac-scan:1521' SCOPE=BOTH;- 重启实例,或至少执行
ALTER SYSTEM REGISTER;以触发立即注册 - 注意:不要直接填写IP,必须使用SCAN主机名,这是Oracle RAC动态注册正常工作的基础
验证服务是否完成远程注册
即使SCAN Listener已经启动且REMOTE_LISTENER配置正确,数据库实例仍可能因为LREG进程异常、网络策略限制或通信拦截而导致注册失败。因此,还需要直接验证服务注册结果。
在任意节点执行lsnrctl status LISTENER_SCAN1,查看Services Summary中是否已经出现你的服务名(例如ORCL),并确认其后带有(DYNAMIC)标识。如果服务名存在但实例数为0,表示注册请求已经到达监听器但被拒绝;如果完全没有显示该服务,则说明注册请求根本没有到达SCAN Listener。
这时建议重点检查:
- 防火墙是否已经放通SCAN Listener端口(默认1521)的UDP和TCP双向通信
tail -f $ORACLE_HOME/rdbms/log/alert_*.log中是否出现* SERVICE_REGISTRATION *注册成功记录- 是否存在
ORA-00604或ORA-12537等前置报错影响服务注册流程
避免误用静态注册覆盖动态机制
在Oracle RAC环境中,不建议在listener.ora里为数据库实例添加SID_LIST_LISTENER静态注册条目。这类配置容易与LREG动态注册机制发生冲突,导致监听器同时识别到同名服务的静态与动态版本,并优先响应静态注册;而RAC实例本身并不依赖静态路径,最终就会出现“服务已注册但仍无法连接”的现象。
检查$GRID_HOME/network/admin/listener.ora(注意不是Oracle Home目录下的配置文件):
- 删除所有包含
SID_DESC、GLOBAL_DBNAME、SID_NAME的配置块 - 仅保留包含
LISTENER_SCAN和LISTENER的最简配置 - 执行
srvctl reload scan_listener,不要使用lsnrctl reload(该方式通常不会生效)
Oracle RAC中的服务注册完全依赖REMOTE_LISTENER、DNS解析以及GI网络资源之间的联动机制,任何绕过这套标准流程的手工配置,都可能带来不可预期的问题并影响连接稳定性。
