跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

Oracle RAC监听无法注册实例怎么办?检查local_listener配置

Oracle RAC实例无法注册到监听器,90%是local_listener配置错误所致;必须指向本节点VIP而非物理IP或localhost,且需验证HOST解析、监听器运行状态及防火墙设置。 oraclerac 实例无法注册到监听器,90% 是
local_listener
配置错误导致的,不是监听器没启动,也不是网络不通,而是实例根本没往对的地方“报到”。 为什么 RAC 环境下
local_listener
容易出错 RAC 多节点、多 VIP、多 SCAN 的架构,让
local_listener
必须指向本节点的 VIP(而非物理 IP 或 localhost),否则 PMON 注册时会连错地址,监听器收不到注册请求。常见错误包括: 所有节点共用同一个 VIP 地址(比如都配成 node1-vip),导致注册冲突或被拒绝 配置了物理主机名但
/etc/hosts
未正确定义该主机名对应本节点 VIP 参数中用了
HOST=localhost
或
127.0.0.1
—— 这在 RAC 中完全无效,客户端无法通过该地址访问实例 配置了多个地址但未用
ADDRESS_LIST
包裹,Oracle 只取第一个,其余被忽略 怎么验证
local_listener
是否生效 不能只看
show parameter local_listener
有值就认为 OK。要分三步确认: 执行
ALTER SYSTEM REGISTER
强制触发一次注册(注意:该命令不等待响应,需配合后续检查) 立刻在对应节点上运行
lsnrctl services
,检查输出里是否有本实例的
service_name
和
instance_name
,且状态为 READY 查 PMON 日志(
$ORACLE_BASE/diag/rdbms///trace/alert_.log
),搜索关键词
TNS-12541
、
TNS-12535
或
failed to register
local_listener
的正确写法(RAC 场景) 推荐直接使用 ADDRESS 字符串,避免依赖
tnsnames.ora
解析(减少单点故障)。格式必须严格: 每个节点单独配置,
HOST
必须是本节点 VIP(如
node1-vip
),不能写集群 SCAN 或其他节点 VIP 端口必须与实际监听器监听的端口一致(默认 1521,若改过需同步) 多地址注册(例如同时注册到本地监听和 ASM 监听)必须用
ADDRESS_LIST
,否则只注册第一个 示例(节点 1): oracle知识库 oracle知识库下载 下载
ALTER SYSTEM SET LOCAL_LISTENER='(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=node1-vip)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=node1-vip)(PORT=1526)))' SCOPE=BOTH SID='rac1';
注意:
SID
必须指定具体实例名(如
rac1
),不能用
*
在 RAC 中批量设置——除非你确认所有实例都跑在同一节点上(这违背 RAC 设计)。 容易被忽略的底层依赖 即使
local_listener
配得完全正确,以下三点任一缺失都会导致注册静默失败:
/etc/hosts
中 VIP 主机名必须解析到正确的 IP,且不能存在重复条目(尤其注意 IPv6 ::1 映射) 监听器进程(
tnslsnr
)必须运行在对应节点上,且监听地址包含该 VIP(
lsnrctl status
输出里的
Listening Endpoints Summary
要能看到
(HOST=node1-vip)
) 防火墙必须放行 VIP:PORT 的入向 TCP 连接(不仅是物理网卡 IP) 最麻烦的是:注册失败时 PMON 往往不报错,只是默默重试,而
lsnrctl status
看不到服务,客户端连上去直接报
ORA-12514
—— 此时别急着 reload 监听器,先盯住
local_listener
和 VIP 解析这两处。

相关文章