Oracle 11g RAC升级12c监听冲突解决方案
Oracle11gRAC升级至12c后,MGMTLSNR进程抢占1521端口,导致业务监听器无法启动。通过将业务监听端口改为1522,同步更新listener ora、tnsnames ora、SCAN监听器及防火墙规则可解决,同时需注意sqlnet ora白名单配置。
先说结论:Oracle 11g RAC升级到12c后监听器无法启动,绝大多数情况并非配置错误,而是架构演进带来的“历史遗留问题”。根本原因在于12c新增的MGMTLSNR进程,默认与原来的业务监听器LISTENER争夺同一个端口——1521。该进程由grid用户管理,仅用于内部管理,不对外提供服务,但启动顺序较早,先占用了端口。业务监听器随后尝试启动时发现端口已被占用,直接报错TNS-12542: address already in use,问题清晰直接。

如何确认是 MGMTLSNR 占用了端口?
遇到升级后监听器无法启动的情况,不要急于修改listener.ora,先花几分钟定位端口占用方:
- 使用
grid用户执行lsnrctl status MGMTLSNR,查看该进程是否已运行并占用1521端口。 - 使用
oracle用户执行lsnrctl status LISTENER,若卡在Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))步骤无响应,则基本可以判定是端口冲突。 - 最直接的方式:查看日志文件
/u01/app/grid/diag/tnslsnr/,用/MGMTLSNR/trace/MGMTLSNR.log tail -20检查输出,若出现Address already in use或TNS-12560等关键字,即可确认问题。 - 也可使用
netstat -tuln | grep :1521查看占用端口的PID,再通过ps -ef | grep确认该进程是否为MGMTLSNR。
最稳妥的解法:为业务监听器更换端口
既然MGMTLSNR已经占用了1521端口,不建议禁用该进程(风险较高),更高效的做法是让业务监听器使用其他端口。核心原则是:端口必须错开。
- 首先以
grid用户执行srvctl config listener,查看当前监听器配置信息,明确现状。 - 其次修改端口:执行
srvctl modify listener -p 1522(1522仅为示例,请选择未被占用的端口)。 - 修改CRS资源后,同步更新
listener.ora文件。在$GRID_HOME/network/admin/目录找到该文件,将LISTENER对应的PORT值改为1522,确保与srvctl设置一致。 - 重启监听器:
srvctl stop listener && srvctl start listener,使修改生效。 - 最后,务必检查
tnsnames.ora文件中所有指向该数据库的服务名,若其中仍使用PORT=1521,需全部改为新端口号。否则即使监听器启动,客户端也无法连接。
别忘了SCAN监听器这个容易混淆的组件
端口错开后,还需特别注意SCAN监听器。升级后它有时也会占用1521端口,尤其在集群资源注册不完整时,会报出not all endpoints registered警告。
- 执行
srvctl config scan_listener,确认其是否也占用了1521端口。 - 若冲突,使用
srvctl modify scan_listener -p 1523为其更换端口(同样需确保整个集群所有节点SCAN端口统一)。 - 修改后重启:
srvctl stop scan_listener && srvctl start scan_listener。 - 使用
crsctl stat res -t | grep scan检查资源状态,所有资源应显示ONLINE且无告警。 - 同步修改DNS或
/etc/hosts文件中SCAN名称的解析记录。客户端通过名称连接SCAN地址,如果名称解析错误,则一切配置均无效。
两个容易被忽略的“暗坑”
修改端口后监听器正常启动,但客户端仍无法连接?很可能不是端口问题,而是以下两个配置项导致:
第一个坑:SQLNET白名单
升级后Oracle 12c默认启用TCP.VALIDNODE_CHECKING特性,相当于建立了访问控制白名单。检查$GRID_HOME/network/admin/sqlnet.ora中是否存在TCP.VALIDNODE_CHECKING=yes。若有,必须确认TCP.INVITED_NODES列表中包含客户端IP。未在列表中的客户端连接会被直接拒绝,常见错误为ORA-12537,或出现静默断连。
第二个坑:防火墙规则未同步更新
这是基础但极易忽略的环节。将监听端口从1521改为1522后,Linux的iptables或firewalld可能只放行了1521端口;Windows防火墙也只添加了1521的入站规则。新端口1522的数据包全部被拦截,自然无法连接。因此,防火墙规则必须随监听端口同步调整,这是基本操作。
最后总结一句:修改端口本身并不复杂,真正让人头疼的是修改后需要同步更新的多项配置:tnsnames.ora、sqlnet.ora、DNS或hosts文件,以及客户端连接配置。遗漏任何一项,连接请求就会中断,且错误信息五花八门。逐一检查这些环节,通常能彻底解决问题。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
Redis是什么:核心特性、架构与应用场景解析
Redis是一款基于内存的键值型NoSQL数据库,以超高读写速度和丰富的数据结构著称。本文系统梳理Redis的核心特性、架构组成、性能优势及典型应用场景,并通过与Memcached、MySQL、MongoDB的对比,帮助开发者快速判断Redis是否适合当前业务需求。
Windows 安装 MongoDB 完整图文教程
本文详细介绍在 Windows 系统上安装 MongoDB 的完整流程。从官网下载 MSI 安装包开始,逐步演示自定义安装路径、配置 Windows 服务、跳过 MongoDB Compass 等关键选项,并提供通过系统服务列表验证安装是否成功的方法,帮助开发者快速搭建本地 MongoDB 环境。
Linux 安装 MongoDB 完整指南:依赖配置、环境变量与服务启动
本文详解在 Linux 系统下安装 MongoDB 的完整流程,涵盖依赖包安装、二进制包下载解压、环境变量配置、数据与日志目录创建及服务启动验证。通过标准化命令与路径说明,帮助开发者快速完成部署并确认服务状态。
MacOS安装MongoDB完整教程
本文介绍在MacOS系统下安装MongoDB的完整流程,涵盖下载、解压、目录配置、环境变量设置及服务启动。通过明确的命令与参数说明,帮助开发者快速完成环境搭建并验证安装结果。
Ubuntu系统安装与配置Redis完整指南
本文详解在Ubuntu系统中安装Redis的两种主流方式:apt在线安装与源码编译安装。涵盖版本选择逻辑、服务启停与状态检查、连接验证方法,以及在线练习工具与桌面GUI客户端的对比与使用建议,帮助开发者快速搭建并验证Redis运行环境。
- 热门数据榜
相关攻略
2026-09-01 06:20
2026-09-01 06:20
2026-09-01 06:20
2026-09-01 06:19
2026-09-01 06:19
2026-09-01 06:19
2026-09-01 06:18
2026-09-01 06:18
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

