暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

oracle12c 一个节点listener报错的排查方案

原创 在路上 2025-09-02
356

现象:

客户端连接报错ora-12505,查询集群资源发现一个listener节点报错,not all endpoints registered。这个错误一般是oracle用户启动监听导致,一般是grid来启动,但是排查发现不是这种情况。

1.oracle用户查看监听发现是mgmtlsnr的监听,而不是listener

lsnrctl status

2.查看日志

tail -100f /u01/app/grid/diag/tnslsnr/bgqdb01/listener/trace/listener.log

报错信息:可以看出应该是启动listener但是和已经存在的进程导致的地址冲突。

Error listening on: (ADDRESS=(PROTOCOL=TCP)(RATE_LIMIT=YES)(HOST=x.x.104.42)(PORT=1521)(IP=FIRST))
Dynamic address is already listened on (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.101.86)(PORT=1521)))
02-SEP-2025 12:55:09 * service_register * LsnrAgt * 12542
TNS-12542: TNS:address already in use
 TNS-12560: TNS:protocol adapter error
  TNS-00512: Address already in use
   Linux Error: 98: Address already in use

3.重启监听和重启crs分别观察

srvctl stop listener

srvctl stop scan_listener

srvctl start listener

srvctl start scan_listener


/u01/app/12.1.0/grid/bin/crsctl stop crs

/u01/app/12.1.0/grid/bin/crsctl start crs

重启后还是报错,错误信息,intermediate,not all endpoints registered

4.停止监听后查看grid和oracle用户的监听状态

srvctl stop listener

su - grid

lsnrctl status grid用户的监听停止

su - oracle

lsnrctl status oracle用户发现还是有监听存在,并且监听的别名是MGMTLSNR

正常的状态应该是如下,提示没有监听,但是现在注册到了mgmtlsnr监听

5.核对监听配置文件 两个监听的都是1521端口

srvctl config listener -l MGMTLSNR

srvctl config listener -l LISTENER

6.重新配置监听

su - grid

export DISPLAY=x.x.9.219:0.0

netca

reconfiguration的时候会出现端口被占用。但是这上面就一个数据库实例,初步怀疑是mgmtlsnr导致的。

Use another port number.Pont 1521 provided for this listener is already in use on nodes of Oracle clusterware.Re-enter different information.

7.mgmtlsnr介绍

oracle12c及之后的版本,是一个引入的管理监听器,专门用于oracle集群组件之间的通信,通常运行在1521端口。处理集群管理相关的连接,不用于常规数据库连接。

用于业务的数据库连接的监听器是lsnrctl,也是运行在1521端口,但是绑定的ip地址不同。

mgmtlsnr:私有网络ip,运行在grid下,只在一个节点上运行。

listener:公有网络ip,运行在grid下,在rac两个节点上运行。


8.问题剖析

数据库监听器listener在一个节点上无法启动,因为要绑定公网的ip104.42的1521端口被占用。占用的就是mgmtlsnr管理监听器。

问题的节点分别用grid和oracle用户执行,发现104.42业务ip出现在了mgmtlsnr里面,同时这个地址应该也要在listener中启动,但是同一个地址不可能绑定两个监听,所以导致了地址冲突。

9.查看1521端口

netstat -tulnp | grep 1521 发现104.42已经被mgmtlsnr监听进程占用,listener监听无法绑定到104.42的1521端口。

10.查看集群网络

oifcfg getif 发现有2个私网地址

11.最终处理

修改listener文件,之前没有具体的host地址;手动指定监听的ip地址,排除掉104.42。

MGMTLSNR =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = MGMTLSNR))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.7)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = xx.254.17.31)(PORT = 1521))
)
)

srvctl stop listener

ps -ef|grep tns

kill -9 xx 杀掉mgmtlsnr进程

srvctl start listener重启

发现两个监听都正常了。

最后修改时间:2025-09-03 10:01:24
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论