Oracle 修改默认监听端口故障分析

来源:这里教程网 时间:2026-03-03 17:38:42 作者:

环境说明: OS:Redhat 7.5 DB:Oracle 11.2.0.4.0 单实例 问题: 测试环境数据库端口使用默认端口1521,尝试修改默认端口为8821,修改成功后进行验证。 发现通过8821可以登录到数据库了,搞定,收工? sqlplus cjc/******@10.0.0.10:8821/cjcdb 在验证下1521是不是连接不上了,居然还能连接? sqlplus cjc/******@10.0.0.10:1521/cjcdb 操作过程如下: 1.停止监听 lsnrctl stop 2.修改监听文件listener.ora cd $ORACLE_HOME/network/admin cp listener.ora listener.ora.bak vi listener.ora

LISTENER =
    (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
        (ADDRESS = (PROTOCOL = TCP)(HOST = myhostname)(PORT = myport))
    )

3.修改tnsnames.ora文件 cd $ORACLE_HOME/network/admin cp tnsnames.ora tnsnames.ora.bak vi tnsnames.ora (1)修改对应端口号 (2)文件末尾添加如下内容

MYLISTENER =
    (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = myserver )(PORT = myport))
)

4.修改LOCAL_LISTENER参数 show parameter local ALTER SYSTEM SET LOCAL_LISTENER='MYLISTENER' SCOPE=BOTH; 5.启动监听文件 lsnrctl start 6.验证 sqlplus cjc/******@10.0.0.10:8821/cjcdb 成功! sqlplus cjc/******@10.0.0.10:1521/cjcdb 成功? sqlplus cjc/******@10.0.0.10:61521/cjcdb 随便写一个端口号,失败 问题排查: 为什么改完端口了通过1521还能远程登录? 停止监听 lsnrctl stop 测试,通过1521还能远程登录 sqlplus cjc/******@10.0.0.10:1521/cjcdb 难道是配置了多个监听? 全盘搜索,只有一个listener.ora,而且配置没问题 #find / -name listener.ora 检查1521端口对应的进程 lsof -i:1521 找到1521对应进程pid 查看进程信息 ps -ef|grep pid xxx/bin/tnslsnr listener -inherit  已经停了监听,为何还有监听进程 手动杀掉这个进程,重启监听恢复正常。 问题原因: Metalink上没有找到对应版本的问题, 和Bug 4518443类似,但是版本对不上,这个bug描述如下: The listener process can hang under load while spawning a process.   The last process the listener spawned will have a stack which  includes a mutex lock call in ons_atfork_prepare(). 如何检查你的数据库是否有这个问题? ps -ef|grep -i tnslsnr|grep -v grep 如果有2个进程,说明可能会有类似的问题。 解决方案: 临时解决方案: 杀掉多余的进程。 永久解决方案: 单实例下,将SUBSCRIBE_FOR_NODE_DOWN_EVENT_<listener_name>=OFF配置到监听文件汇总。 或者打补丁。 其他:如何修改RAC环境下默认监听端口号? 1.查看当前监听配置 srvctl config listener 2.修改ocr中记录的端口号 srvctl modify listener -l LISTENER -p "TCP:<new-listener-port>" 3.修改scan_listener端口号 srvctl modify scan_listener -p <new-scan-port> 4.修改LOCAL_LISTENER  alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=<Host-name>)(PORT=<new-port-number>))))' scope=both sid='[<your-chosen-instance> | * ] ' 5.修改REMOTE_LISTENER 6.重启监听 参考: Changing Default Listener Port Number (Doc ID 359277.1) Changing Listener Ports On RAC/EXADATA (Doc ID 1473035.1) Bug 4518443 - Listener hang under load (Doc ID 4518443.8)

相关推荐