remote_listener配置错误会导致scan监听器收不到实例注册,引发ora-12514/ora-12545连接失败;根本原因是tnsnames.ora中未定义该别名、未执行alter system register、scan监听器异常或local_listener配置错误,须逐项验证并同步至所有节点。

REMOTE_LISTENER 配置错误会导致 SCAN 监听器收不到实例注册,客户端连接随机失败(ORA-12514、ORA-12545),不是网络不通,而是服务根本没“报到”。
REMOTE_LISTENER 值在 tnsnames.ora 中未定义
这是最常见也最容易被忽略的问题:数据库启动时尝试解析 REMOTE_LISTENER 参数值(比如 LISTENERS_RAC),但该名称在 $ORACLE_HOME/network/admin/tnsnames.ora 里根本不存在,或只存在于部分节点。
- 用
tnsping LISTENERS_RAC测试,返回TNS-03505: Failed to resolve name就确认了问题 - 必须在所有节点的
tnsnames.ora中统一添加完整条目,不能只写 IP+端口字符串;推荐格式:LISTENERS_RAC = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan.example.com)(PORT = 1521)))
- SCAN 名称必须能 DNS 解析且所有节点解析结果一致,
/etc/hosts里写死 SCAN 条目更稳妥
配置后未触发动态注册
ALTER SYSTEM SET REMOTE_LISTENER=... 只改参数,不自动向远程监听器发起注册请求。
- 配置完必须立刻执行:
ALTER SYSTEM SET REMOTE_LISTENER='LISTENERS_RAC' SCOPE=BOTH;<br>ALTER SYSTEM REGISTER;
- 等 30 秒后运行
lsnrctl services LISTENER_SCAN1,检查输出中是否出现本实例的SERVICE_NAME和INSTANCE_NAME,状态为READY - 别依赖重启监听器来“补注册”,
ALTER SYSTEM REGISTER是唯一即时生效的手段
SCAN 监听器本身异常或端口不通
即使 REMOTE_LISTENER 配得完全正确,若 SCAN 监听器没运行、端口被拦、或 DNS 解析失败,注册仍会静默失败。
-
crsctl stat res -t | grep scan必须显示ONLINE,且无告警 - SCAN 默认监听 1521 端口(12c+ 可能是 1522),但防火墙常只放开 1521;务必确认 1521/1522 端口在所有节点上对客户端和集群内部都开放
- 用
telnet rac-scan.example.com 1521或nc -zv rac-scan.example.com 1521验证连通性,不要只信ping - 日志路径:
$GRID_HOME/log/<hostname>/client/listener.log</hostname>,搜索register或failed关键词
local_listener 配置错误导致 remote 注册链路中断
SCAN 监听器不直接管理实例,它靠 local_listener 把服务信息“转发”过去。如果 local_listener 没设、设错或指向无效地址,remote 注册就断在第一步。
- 查当前值:
show parameter local_listener;返回空或localhost就是错的 - 必须设成本节点 VIP 地址,例如:
ALTER SYSTEM SET LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=node1-vip)(PORT=1521))' SCOPE=BOTH SID='rac1';
- 注意
SID必须指定本节点实例名,不能用*批量设置 - 补完后立刻执行
ALTER SYSTEM REGISTER,再查lsnrctl services LISTENER_SCAN1确认服务上线
真正卡住人的地方往往不是参数写错,而是改完没验证注册是否生效,或者以为改了 tnsnames.ora 就万事大吉,却忘了同步到所有节点、没清 DNS 缓存、也没检查防火墙端口——这些环节缺一不可。











