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

ORACLE 监听

DBA随笔记 2024-11-16
501
监听的工作原理

在Oracle集群数据库中,监听(Listener)是一种后台进程,它监控来自客户端的连接请求,并根据其配置文件(通常是listener.ora)中定义的规则,将这些请求路由到相应的数据库服务或实例进行处理。

Net服务

Oracle Net Listener(侦听器)是一个服务器端进程,它侦听传入的客户端连接请求并管理到数据库的流量。当数据库实例启动时,以及在其生命周期中的不同时间,该实例会联系侦听器并建立到该实例的通信路径。

服务注册使侦听器能够确定数据库服务及其服务处理程序是否可用。service handler是一个专用的服务器进程或调度程序,充当到数据库的连接点。在注册期间,LREG进程向侦听器提供实例名称、数据库服务名称以及服务处理程序的类型和地址。此信息使侦听器能够在客户端请求到达时启动服务处理程序。

1.创建监听的方法

1.1使用netca
使用Oracle Net Configuration Assistant(netca):netca是一个图形化工具,可以通过向导方式创建和配置监听器。在Oracle数据库安装过程中,可以选择使用netca来创建监听器,它会引导用户完成监听器的配置。

一直下一步


1.2 使用Net Manager工具配置侦听器
侦听器的配置信息存入对应的配置文件listener.ora,该文件的默认路径为$ORACLE_HOME/network/admin/listener.ora,侦听器的设置主要包括侦听位置和对应的数据库服务,侦听位置包括主机、端口和使用的通讯协议,Oracle 默认的标准端口是1521,通常采用的协议是TCP/IP。
[oracle@localhost ~]$ netmgr
1.3通过修改listener.ora
[oracle@localhost ~]$ cd $ORACLE_HOME/network/admin
[oracle@localhost admin]$ ls
[oracle@localhost admin]$ vim listener.ora

查看监听状态和配置

    --集群用grid用户,单机环境用oracle用户
    --查看监听配置文件
    [oracle@localhost admin]$ cat $ORACLE_HOME/network/admin/listener.ora
    [oracle@localhost admin]$ lsnrctl status listener
    [oracle@localhost admin]$ lsnrctl status listener_scan1




    $ lsnrctl status listener


    LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 08-FEB-2024 15:03:44


    Copyright (c) 1991, 2019, Oracle. All rights reserved.


    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER3)))
    STATUS of the LISTENER
    ------------------------
    Alias LISTENER3
    Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production
    Start Date 15-MAY-2023 14:38:50
    Uptime 269 days 0 hr. 24 min. 53 sec
    Trace Level off
    Security ON: Local OS Authentication
    SNMP OFF
    Listener Parameter File u01/app/12.0.0.0/grid/network/admin/listener.ora
    Listener Log File         /u01/app/grid/diag/tnslsnr/dm08dbadm01/listener/alert/log.xml
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
    (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.10.101)(PORT=1526)))
    Services Summary...
    ...
    Service "abc" has 1 instance(s).


    Instance "abc1", status READY, has 1 handler(s) for this service...


    $ srvctl config listener
    --例子
    $ srvctl config listener
    Name: LISTENER
    Type: Database Listener
    Network: 1, Owner: grid
    Home: <CRS home>
    End points: TCP:1521
    Listener is enabled.
    Listener is individually enabled on nodes:
    Listener is individually disabled on nodes:

    启停监听

      --集群用grid用户,单机环境用oracle用户
      $ lsnrctl START [listener_name]
      --例子
      $ lsnrctl start listener
      $ lnsrctl start listener -listener listener1,listener_test


      $ lsnrctl STOP [listener_name]
      --例子
      $ lsnrctl stop listener
      $ lsnrctl stop listener -listener listner1,listener2
      $ lsnrctl stop listener_test


      --reload
      $ lsnrctl reload listener

      增删监听

        --集群用grid用户,单机环境用oracle用户


        $ srvctl add listener -listener listener_abc1
        $ srvctl remove listener -listener listener_abc1


        12c集群默认配置
        此处列出一个oracle 12c集群环境的listener相关的默认配置,默认是在GI安装时通过配置了vip和scan-ip而自动生成的sqlnet.ora和listener.ora,及相关的监听服务器。此处假设集群中两个节点主机名分别为service1和service2。

        crs中监听相关资源

          grid@service1:/home/grid$ crsctl status res -t
          --------------------------------------------------------------------------------
          Name Target State Server State details
          --------------------------------------------------------------------------------
          Local Resources
          --------------------------------------------------------------------------------
          ora.LISTENER.lsnr
          ONLINE ONLINE service1 STABLE
          ONLINE ONLINE service2 STABLE
          ora.net1.network
          ONLINE ONLINE service1 STABLE
          ONLINE ONLINE service2 STABLE
          ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup)
          1 ONLINE OFFLINE STABLE
          2 ONLINE ONLINE service1 STABLE
          3 ONLINE ONLINE service2 STABLE
          ora.LISTENER_SCAN1.lsnr
          1 ONLINE ONLINE service1 STABLE
          ora.LISTENER_SCAN2.lsnr
          1 ONLINE ONLINE service2 STABLE
          ora.LISTENER_SCAN3.lsnr
          1 ONLINE ONLINE service1 STABLE
          ora.scan1.vip
          1 ONLINE ONLINE service1 STABLE
          ora.service1.vip
          1 ONLINE ONLINE service1 STABLE
          ora.service2.vip
          1 ONLINE ONLINE service2 STABLE

          sqlnet.ora

            • grid@service1:/u01/app/12.2.0.1/grid/network/admin$ cat sqlnet.ora
              # sqlnet.ora.service1 Network Configuration File: /u01/app/12.2.0.1/grid/network/admin/sqlnet.ora.service1
              # Generated by Oracle configuration tools.


              NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

            listener.ora

              --手动基于实例添加静态监听
              SID_LIST_LISTENER =
              (SID_LIST =
              (SID_DESC =
              (GLOBAL_DBNAME = abc)
              (ORACLE_HOME = u01/app/oracle/product/19.7.0.0/db)
              (SID_NAME = abc1)
              )
              (SID_DESC =
              (GLOBAL_DBNAME = whm)
              (ORACLE_HOME = u01/app/oracle/product/12.2.0.1/dbhome_1)
              (SID_NAME = whm1)
              )
              )


              1.4监听的几大要素
              1. 监听器名称(Listener Name):监听器的唯一标识符,用于在系统中区分不同的监听器。
              2. 监听地址(Listener Address):监听器绑定的网络地址。可以使用IP地址或主机名来指定监听器的地址。
              3. 监听端口(Listener Port):监听器监听的端口号。客户端通过该端口与监听器进行通信。
              4. 协议(Protocol):指定监听器使用的通信协议。常见的协议包括TCP/IP、IPC(Inter-Process Communication)等。
              5. 监听器类型(Listener Type):监听器可以是标准监听器(Standard Listener)或多个实例监听器(Multiple-Instance Listener)。标准监听器用于监听单个数据库实例,而多个实例监听器用于监听多个数据库实例。
              6. 监听器日志文件(Listener Log File):监听器的日志文件路径和名称。该日志文件用于记录监听器的活动和事件。
              7. 监听器密码文件(Listener Password File):如果需要对监听器进行安全认证,可以配置监听器密码文件。该文件包含用于连接到监听器的用户名和密码。
              2 监听区别

              动态监听与静态监听的区别

              2.1.    静态监听器:

              静态监听器是最常见的监听器配置方式。在静态监听器中,监听器的地址和端口号是固定的,事先在监听器配置文件(通常是listener.ora)中定义好。当数据库启动时,监听器会根据配置文件中的信息监听指定的地址和端口。静态监听器通常用于单个实例数据库的监听。

              2.2.    动态监听器:

              动态监听器是相对灵活和可自动管理的监听器配置方式。在动态监听器中,监听器的地址和端口号不需要在配置文件中提前定义。当数据库启动时,动态监听器会根据数据库实例的注册信息自动获取可用的地址和端口号,然后监听这些地址和端口。动态监听器可以实现在数据库启动和停止时自动注册和注销监听。

              2.3 区别

              静态监听器需要手动在监听器配置文件中定义地址和端口号,配置固定且静态不变。而动态监听器可根据数据库实例的注册信息自动获取可用地址和端口号,并动态注册和注销。

              静态监听器适用于单一实例数据库,适合在固定的地址和端口监听数据库。而动态监听器适用于多实例或集群环境,可以根据实例的变化自动管理监听。

              静态监听器通常需要手动编辑监听器配置文件,而动态监听器则更加自动化和灵活。

              lsnrctl status 后,显示ready为动态监听,显示unknown为静态监听

              动态监听的配置只需指定监听地址,其他信息由监听器进程自动获取并注册到数据库中。而静态监听需要手动指定监听器的详细信息,包括监听地址和要监听的数据库实例。

              2.4 如何清理监听日志文件

              查找监听日志

              单机(集群)都看这里,只不过,集群是在grid用户下,而单机则是在oracle用户下。这里说的是 log.xml 监听日志文件

                cd $ORACLE_BASE/diag/tnslsnr/$HOSTNAME/listener/alert

                查看监听日志文件的大小

                进入监听日志文件所在目录,使用du -sh或者du -sh *或者du -sh listener.log查看其大小。

                  cd $ORACLE_BASE/diag/tnslsnr/$HOSTNAME/listener && du -sh *
                  $ find $ORACLE_BASE/diag -name listener*.log|xargs ls -l
                  --节点1
                  $ tail -100f u01/app/grid/diag/tnslsnr/service1/listener/trace/listener.log

                  注:主要关注alter和trace文件夹大小

                    --清理
                    echo dev/null listener.log

                    2.5 listener.log\tnsnames.ora\sqlnet.ora文件的作用

                    listener.log是监听器的日志文件,记录了监听器的活动和事件。它包含了连接请求、断开连接、错误和警告等信息。通过查看listener.log文件,可以了解监听器的运行状态、连接请求的处理情况以及发生的错误和警告信息,对于故障排除和性能调优非常有用

                    tnsnames.ora是Oracle客户端配置文件,用于定义数据库服务的网络连接信息。在tnsnames.ora文件中,可以配置数据库的别名(Service Name或SID)、主机名、端口号等连接参数。客户端应用程序通过读取tnsnames.ora文件中的配置信息,可以根据别名来连接指定的数据库服务。tnsnames.ora文件通常位于$ORACLE_HOME/network/admin目录下。

                    sqlnet.ora是Oracle数据库的网络配置文件,用于定义数据库客户端和服务器之间的网络通信参数。在sqlnet.ora文件中,可以配置加密算法、认证方式、连接超时等网络参数。通过修改sqlnet.ora文件,可以控制数据库客户端和服务器之间的网络安全性和性能。sqlnet.ora文件通常位于$ORACLE_HOME/network/admin目录下。

                    设置黑白名单

                      编辑$ORACLE_HOME/network/admin目录下sqlnet.ora文件


                      添加:
                      # 启用IP地址验证
                      TCP.VALIDNODE_CHECKING = YES


                      # 允许连接的客户端IP地址
                      TCP.INVITED_NODES = (192.168.200.151,10.10.22.116)


                      # 禁止连接的客户端IP地址
                      TCP.EXCLUDED_NODES = (192.168.200.129)


                      执行lsnrctl reload 或lsnrctl stop/lsnrctl start命令让文件生效
                      2.6  常见的监听问题

                      监听器无法启动或停止:

                      检查监听器配置文件(通常是listener.ora)中的配置是否正确。

                      确保监听器要使用的端口没有被其他进程占用。

                        netstat -tln |grep <端口号>

                        检查输出结果。如果没有显示任何结果,表示该端口当前没有被其他进程占用。

                        检查监听器进程是否已经在运行,如果是,则尝试使用`lsnrctl stop`命令停止监听器进程,然后再重新启动。

                        监听器无法连接到数据库:

                        检查数据库实例是否已启动,可以使用`ps -ef | grep smon`命令检查数据库实例进程是否存在。

                        确保监听器配置文件中的数据库实例名或服务名与数据库实例的配置一致。

                        检查网络连接是否正常,可以使用`ping`命令测试数据库服务器的可达性。检查防火墙配置,确保允许监听器和数据库之间的通信。


                        监听器日志中出现错误:

                        TNS-12545错误(连接失败):检查数据库实例是否已启动,以及监听器配置文件中的数据库实例名或服务名是否正确。

                        TNS-12560错误(协议适配器错误):检查监听器配置文件中的协议适配器配置是否正确,例如是否使用了正确的监听协议(TCP/IPIPC等)。

                        TNS-12541错误(无监听程序):检查监听器是否已启动,以及监听器配置文件中的监听地址和端口是否正确。













                        文章转载自DBA随笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                        评论