Oracle 11g RAC升级12c后监听起不来,主因是MGMTLSNR与LISTENER均默认绑定1521端口导致地址冲突;应通过srvctl修改LISTENER端口(如1522)、同步更新listener.ora及tnsnames.ora等配置,并检查SCAN监听、防火墙和SQLNET白名单。
oracle 11g rac 升级到 12c 后,监听冲突不是配置遗漏导致的,而是架构变化引发的端口抢占——mgmtlsnr 和 listener 默认都绑定 1521 端口,且 mgmtlsnr 由 grid 用户启动、不对外提供业务连接,但会先占住端口,导致业务监听器启动失败并报 tns-12542: address already in use。
确认是否是 MGMTLSNR 占用 1521 端口
升级后监听起不来,别急着改 listener.ora,先定位真实冲突源:
- 用
grid用户执行lsnrctl status MGMTLSNR,看它是否在运行且监听1521 - 用
oracle用户执行lsnrctl status LISTENER,通常会提示Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))后卡住或报错 - 查日志:
tail -20 /u01/app/grid/diag/tnslsnr/<hostname>/MGMTLSNR/trace/MGMTLSNR.log,出现Address already in use或TNS-12560就坐实了 -
netstat -tuln | grep :1521能看到哪个 PID 在监听,再用ps -ef | grep <pid>确认是MGMTLSNR进程
让 LISTENER 使用独立端口(推荐)
业务监听器必须和 MGMTLSNR 错开,不能共用 1521。改 LISTENER 的端口比停 MGMTLSNR 安全得多:
- 用
grid用户执行:srvctl config listener查当前配置 - 修改监听器端口:
srvctl modify listener -p 1522(或你选的其他空闲端口) - 同步更新
$GRID_HOME/network/admin/listener.ora中LISTENER的PORT值,保持一致 - 重启:
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 名称解析对应的 IP,确保客户端能连上 SCAN 地址
白名单或防火墙干扰容易被忽略
端口改完仍连不上?升级后默认启用的 TCP.VALIDNODE_CHECKING 可能拦掉合法客户端:
- 检查
$GRID_HOME/network/admin/sqlnet.ora是否含TCP.VALIDNODE_CHECKING=yes - 若存在,确认
TCP.INVITED_NODES列表里包含客户端 IP,否则连接直接拒绝,错误是ORA-12537或静默断连 - Linux 上检查
iptables或firewalld是否放行了新端口(如1522),不止1521 - Windows 防火墙同样要为新监听端口单独添加入站规则,不能只依赖旧规则
真正麻烦的不是改端口,而是改完之后忘记同步更新 tnsnames.ora、sqlnet.ora、DNS/hosts、客户端配置这四类地方——漏一个,连接就断在半路,现象还各不相同。


















