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

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

IT小Chen 2022-05-25
1275

环境说明:

    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)
                      文章转载自IT小Chen,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                      评论