remote_listener指向的tns名称未在tnsnames.ora中定义是最常见失效原因;需确保该名称存在、可解析,且指向scan而非vip,并配合alter system register生效。
remote_listener 指向的 tns 名称未在 tnsnames.ora 中定义
这是最常见、也最容易被忽略的失效原因:数据库实例启动时会尝试解析 remote_listener 参数值(比如 dtydb-scan2:1521 或 listeners_rac),但该名称在 $oracle_home/network/admin/tnsnames.ora 中根本不存在,或只存在于某个节点而未同步到所有节点。
- 现象:执行
lsnrctl status看不到远程实例注册;SELECT * FROM gv$listener_network;显示 remote_listener 为空或解析失败 - 检查方法:以 oracle 用户登录任意节点,运行
tnsping LISTENERS_RAC(把你的实际 TNS 名称代入),若返回TNS-03505: Failed to resolve name就确认了问题 - 实操建议:
tnsnames.ora中必须为REMOTE_LISTENER值定义一个完整条目,且需包含所有 RAC 节点的 SCAN VIP 或 VIP 地址,例如:LISTENERS_RAC = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan.example.com)(PORT = 1521)))
- 注意:不能直接写 IP+端口字符串(如
(DESCRIPTION=(ADDRESS=...)))作为REMOTE_LISTENER值,必须是 tnsnames.ora 中可解析的网络别名
REMOTE_LISTENER 配置未生效或未动态注册
ALTER SYSTEM SET REMOTE_LISTENER=... 只修改参数,不自动触发服务注册。如果后续没执行 ALTER SYSTEM REGISTER;,实例就不会向 remote_listener 所指监听器发起注册请求。
- 现象:监听器日志(
$GRID_HOME/log/hostname/client/listener.log)里没有新实例注册记录;lsnrctl services <scan_listener_name></scan_listener_name>不显示本实例的服务名 - 实操建议:配置完后立即执行两步:
ALTER SYSTEM SET REMOTE_LISTENER='LISTENERS_RAC' SCOPE=BOTH;<br>ALTER SYSTEM REGISTER;
- 补充验证:等 30 秒后再次查
lsnrctl services,确认对应 service_name 下出现了多个 instance(如rac1,rac2) - 注意:如果使用 ASM 实例管理监听,需确保 GI 已启动且
crsctl stat res -t | grep lsnr显示 SCAN 监听器 ONLINE
SCAN 监听器未运行或端口不通
REMOTE_LISTENER 通常指向 SCAN 名称(如 mycluster-scan:1521),而 SCAN 监听器由 Grid Infrastructure 管理。一旦 SCAN 监听器宕机、端口被防火墙拦截,或 DNS 解析异常,remote 注册即告失败。
- 现象:
tnsping mycluster-scan超时;crsctl stat res ora.scan1.vip显示 OFFLINE;客户端连接时只连上某一个节点,无轮转 - 检查顺序:
srvctl status scan→srvctl status scan_listener→nslookup mycluster-scan→telnet mycluster-scan 1521 - 实操建议:优先用
srvctl start scan和srvctl start scan_listener拉起;若 DNS 不可靠,临时改用 /etc/hosts 绑定 SCAN IP - 注意:SCAN 必须是 3 个 IP(11gR2+),且所有节点的
remote_listener必须指向同一个 SCAN 名称,不能混用不同 SCAN 或混用 VIP
local_listener 与 remote_listener 的地址冲突或错配
当 local_listener 错误地指向了 SCAN 地址(而非本节点 VIP),或 remote_listener 被设成本节点监听地址,会导致实例注册混乱——要么只往本地 listener 注册(失去跨节点分发能力),要么注册到错误监听器引发连接拒绝。
- 典型错误配置:
local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=rac-scan)(PORT=1521))'(应为本节点 VIP 或 VIP 主机名) - 正确模式:
local_listener指向本节点 VIP(如rac1-vip.example.com:1521);remote_listener指向 SCAN(如rac-scan.example.com:1521) - 验证命令:
show parameter local_listener和show parameter remote_listener输出必须语义清晰,且两个参数值在 tnsnames.ora 中均有正确定义 - 注意:12c 引入了
listener_networks参数,若已配置,它会覆盖local_listener行为,此时需一并检查
真正让负载均衡“动起来”的不是参数本身,而是 remote_listener 解析成功 + SCAN 监听器在线 + 实例完成动态注册这三者的闭环。少任何一个环节,连接就只会落到单个节点——哪怕 tnsping 能通、哪怕参数 show 出来了,也不代表它在工作。











