Oracle监听器相关知识(2)

作者: 千幻流光 | 来源:发表于2017-11-09 11:06 被阅读40次

    本文大部分为转载。

    原文作者1:realkid4,原文地址:链接
    原文作者2:chyinzi,原文地址:链接

    1,lsnrctl的使用

    监听器在Windows和Linux/Unix平台上,都可以直接操作。
    下面将以Windows平台操作为例,Linux/Unix平台的操作类似。

    在命令行窗口(CMD),输入lsnrctl,就可以进入监听器控制窗口。

    C:\Documents and Settings\Administrator>lsnrctl 
    
    LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 26-12月-2010 21:53:04 
    
    Copyright (c) 1991, 2005, Oracle.  All rights reserved. 
    
    欢迎来到LSNRCTL, 请键入"help"以获得信息。 
    
    LSNRCTL>
    

    通过输入命令help,可以查看支持的监听器操作命令。下面介绍常用的几个。

    a,status

    功能:查看当前监听器状态

    LSNRCTL> status
    正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) 
      //连接监听器的名称和信息:主机名+监听端口号
    LISTENER 的 STATUS
    ------------------------
    别名                      LISTENER
    版本                      TNSLSNR for 32-bit Windows: Version 11.2.0.1.0 - Production
      //Listener版本信息,在一台机器多实例的情况下,很重要!因为版本对应向下兼容
    启动日期                   08-11月-2017 13:47:21
    正常运行时间                0 天 0 小时 4 分 32 秒
    跟踪级别                   off
    安全性                     ON: Local OS Authentication
      //监听器一般有操作系统验证和密码验证两种安全验证方式。
      //这里Local OS Authentication表明启动、关闭监听器的操作权限是通过本地操作系统安全验证
      //也可以单独为监听器设置密码,改为密码验证
    SNMP                      OFF  //是否开启对简单网络管理协议的支持
    监听程序参数文件            C:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora
      //配置文件的存放路径和文件名
    监听程序日志文件            c:\app\administrator\diag\tnslsnr\class11g\listener\alert\log.xml
      //监听器操作日志文件的路径和文件名
    监听端点概要...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=class11g)(PORT=1521)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
      //监听器监听的服务器和端口信息
    服务摘要..
    服务 "CLRExtProc" 包含 1 个实例。
      实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    服务 "Example_1" 包含 1 个实例。
      实例 "sales", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    服务 "a" 包含 1 个实例。
      实例 "sales", 状态 READY, 包含此服务的 1 个处理程序...
    服务 "b" 包含 1 个实例。
      实例 "sales", 状态 READY, 包含此服务的 1 个处理程序...
    服务 "ora11g" 包含 1 个实例。
      实例 "ora11g", 状态 READY, 包含此服务的 1 个处理程序...
    服务 "ora11gXDB" 包含 1 个实例。
      实例 "ora11g", 状态 READY, 包含此服务的 1 个处理程序...
    服务 "sales" 包含 1 个实例。
      实例 "sales", 状态 READY, 包含此服务的 1 个处理程序...
    服务 "salesXDB" 包含 1 个实例。
      实例 "sales", 状态 READY, 包含此服务的 1 个处理程序...
      //当前已经在监听器中注册的服务名称和实例名称
    命令执行成功
    
    b,start/stop

    功能:开启/关闭监听器

    监听器的行为受到参数文件listener.ora的控制。该文件是一个文本文件。

    Oracle对于文本类型的参数文件,大多数情况下是不支持热加载的。例如数据库的Pfile和listener.ora都是如此。因此,当我们调整了监听器的参数,通常会先停止监听器,再开启监听器,这样监听器就会重新读取参数文件并按照新的参数运行。

    调整监听参数的有两种途径,可以通过Oracle提供的GUI界面完成,也可以通过手工修改listener.ora来完成。

    使用界面GUI,就是使用Net Configuration Assistant来配置。配置完成后,配置程序会自动重新启动监听器程序,来加载修改的参数文件。如果采用手工修改listener.ora,就必须要手工的进行监听程序关闭和启动。

    使用GUI可以满足大部分的情况,而且可以避免拼写错误引发的监听器故障(监听器不会检查配置项目的正确与否)。但是,在一些比较复杂的情况下,比如一台机器绑定多个IP的情况,或者RAC的复杂功能配置上,还是更多使用手工编写listener.ora的方法。

    start命令执行后,会自动运行一次status命令,命令执行结果如下

    LSNRCTL> stop
    正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
    命令执行成功
    LSNRCTL> start
    启动tnslsnr: 请稍候...
    
    TNSLSNR for 32-bit Windows: Version 11.2.0.1.0 - Production
    系统参数文件为C:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora
    写入c:\app\administrator\diag\tnslsnr\class11g\listener\alert\log.xml的日志信息
    监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
    监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=class11g)(PORT=1521)))
    监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
    
    正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
    LISTENER 的 STATUS
    ------------------------
    别名                      LISTENER
    版本                      TNSLSNR for 32-bit Windows: Version 11.2.0.1.0 - Production
    启动日期                   09-11月-2017 10:55:31
    正常运行时间                0 天 0 小时 0 分 3 秒
    跟踪级别                   off
    安全性                     ON: Local OS Authentication
    SNMP                      OFF
    监听程序参数文件            C:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora
    监听程序日志文件            c:\app\administrator\diag\tnslsnr\class11g\listener\alert\log.xml
    监听端点概要...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=class11g)(PORT=1521)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
    服务摘要..
    服务 "CLRExtProc" 包含 1 个实例。
      实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    服务 "Example_1" 包含 1 个实例。
      实例 "sales", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    命令执行成功
    
    c,reload

    功能:重新加载配置文件,类似于重启监听器
    lsnrctl提供了reload命令,可以在listener启动的情况下,重新加载参数文件和SID信息。

    reload命令执行结果如下

    LSNRCTL> reload
    正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
    命令执行成功
    
    d,其他命令

    通过help可以看到lsnrctl提供的其他功能命令

    LSNRCTL> help
    以下操作可用
    星号 (*) 表示修改符或扩展命令:
    
    start               stop                status
    services            version             reload
    save_config         trace               change_password
    quit                exit                set*
    show*
    

    各个命令的功能简述如下:

    start - Start the Oracle listener
    stop - Stop the Oracle listener
    status - Display the current status of the Oracle listener
    services - Retrieve the listener services information
    version - Display the oracle listener version information
    reload - This will reload the oracle listener SID and parameter files. This is equivalent to lsnrctl stop and lsnrctl start.
    save_config - This will save the current settings to the listener.ora file and also take a backup of the listener.ora file before overwriting it. If there are no changes, it will display the message “No changes to save for LISTENER”
    trace - Enable the tracing at the listener level. The available options are ‘trace OFF’, ‘trace USER’, ‘trace ADMIN’ or ‘trace SUPPORT’
    spawn - Spawns a new with the program with the spawn_alias mentioned in the listener.ora file
    change_password - Set the new password to the oracle listener (or) change the existing listener password.
    show - Display log files and other relevant listener information.

    set选项

    LSNRCTL> set
     set之后提供了以下操作
    星号 (*) 表示修改符或扩展命令:
    
    password                           rawmode
    displaymode                        trc_file
    trc_directory                      trc_level
    log_file                           log_directory
    log_status                         current_listener
    inbound_connect_timeout            startup_waittime
    save_config_on_stop                dynamic_registration
    enable_global_dynamic_endpoint
    

    show选项

    LSNRCTL> show
     show之后提供了以下操作
    星号 (*) 表示修改符或扩展命令:
    
    rawmode                            displaymode
    rules                              trc_file
    trc_directory                      trc_level
    log_file                           log_directory
    log_status                         current_listener
    inbound_connect_timeout            startup_waittime
    snmp_visible                       save_config_on_stop
    dynamic_registration               enable_global_dynamic_endpoint
    oracle_home                        pid
    

    2,监听器工作过程

    一般监听器作为一个独立process在操作系统中运行,监听在特定网络端口(默认为:1521),等待客户端请求的到来。注意:我们在客户端配置命名服务的时候,输入的1521也就是为了与监听器程序建立连接。

    当一个请求“如期而至”,监听器对照已经注册的服务列表,查找对应的数据库实例信息,获取到指定实例的ORACLE_HOME路径。相当于表明可以进行连接。

    客户端与实例的交互不是直接的,是通过Server Process作为代理中介来实现的。所有指令SQL都是客户端通过Server Process发送到实例中,这种体系结构是Oracle对于实例和数据库文件一种保护机制。

    当监听器获得请求之后,要从Oracle实例中分配一个Server Process与之对应。这里不同的Oracle连接方式存在一些差别。

    • 如果是专用连接模式,也就是一个客户端连接对应一个Server Process。监听器就会向OS请求fork(创造)出一个Server Process,与监听器尝试交互。

    • 如果是共享连接模式,也就是多个客户端共享一个Server Process(注意:这里还不是连接池)。监听器就会向Dispatcher进程(管理共享模式连接的进程)请求一个Server Process与之交互。

    Server Process与监听器的连接,实际上就是相互信息的交换。Server Process将自身在OS中的进程编号、连接地址信息发给监听器。监听器将客户端信息传递给Server Process。

    监听器获取到Server Process的信息之后,将其返回给客户端连接程序。客户端获取到信息之后,进行重连接,根据返回的信息与Server Process在制定的服务器端口进行联系。

    直到这个时候,客户端程序才将连接用户名、密码等信息发给Server Process,进行登录验证等操作。监听器的工作也就到此结束。

    这里面有一个技术细节,就是Server Process与客户端连接的时候,是允许不使用1521端口的。具体连接的端口,是带有随机因素的。在9i版本Windows平台下,如果安装了防火墙并设置只允许1521端口通信,会带来一些连接问题。好在在其他平台上和之后的版本中,实现了一种端口共享技术,连接可以和监听器一起使用1521端口。

    相关文章

      网友评论

        本文标题:Oracle监听器相关知识(2)

        本文链接:https://www.haomeiwen.com/subject/kowdmxtx.html