zoukankan      html  css  js  c++  java
  • 服务器端监听器配置

    1、服务器端监听器配置

    Oracle监听器是运行在数据库端的一个进程,这个进程负责监听用户的连接请求。每当收到一个用户请求,监听器进程就会创建一个影子进程(Shraw Process),然后把用户请求转交给这个影子进程,由影子进程继续完成用户提交的各种命令。一旦监听器进程把用户转交给影子进程,监听进程的任务就算完成了,它就继续监听下一个用户请求。所以监听器的角色就像一个中间人,它只是负责为用户进程和影子进程搭桥牵线。

    监听器是根据配置文件工作的,这个文件叫做listener.ora,位于$ORACLE_HOME/network/admin目录下,因为监听器只工作在数据库服务器端,因此这个文件只有服务器端需要,客户端并不需要这个文件。这个文件的内容如下:

    LISTENER =

    (DESCRIPTION_LIST =

    (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.51)(PORT = 1521))

    )

    )

    这个文件内容说明监听器在IP地址192.168.2.51的1521端口上监听。

    Oracle能够支持两种连接方式,分别是专有模式(Dedicated Service)和共享模式(Shared Server)。二者的区别在于,专有模式为每个用户连接启动一个单独的进程(Shadow Process),相当于为每个用户提供一个单独的到服务器的会话通道,专有由此得名。而共享模式是躲个用户连接共享一个进程,也就是多个用户共享一个会话通道,因此叫做共享。Net Services Administrator’s Guide,使用哪一种模式是在创建数据库时确定的。

    2、静态注册和动态注册

    服务器端的监听进程和数据库是两组独立的进程。换句话说,一台物理服务器上可以同时运行多个数据库,具体数量取决于服务器的资源能力,理论上可以是无限的。但是一台服务器上一般只需要一个监听进程就足够了,一个监听进程足以为它所在的服务器上的所有数据库提供服务,也就是说,监听进程并不固定为一个数据库服务。

    因为监听进程并不绑定在特定数据库,所以监听器要想完成它的使命——传递用户的连接请求,首先必须知道如果才能知道找到目标数据库,这个信息的获得可以通过两种方式,静态注册和动态注册。

    2.1、静态配置

    所谓静态配置,就是在配置监听器时,就明确的告诉监听器某个数据库的信息,监听器在启动过程中就会加载这一部分信息。这个信息同样是记录在监听器的配置文件LISTENER.ORA中,下面就是使用静态配置的LISTENER.ORA文件,注意其中SID_LIST_LISTENER部分就是静态配置内容。

    SID_LIST_LISTENER =

    (SID_LIST =

    (SID_DESC =

    (GLOBAL_DBNAME = ORCL.192.168.2.51)

    (ORACLE_HOME = C:\oracle\product\10.1.0\Db_1)

    (SID_NAME = ORCL)

    )

    )

    LISTENER =

    (DESCRIPTION_LIST =

    (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.51)(PORT = 1521))

    )

    )

    这个例子就是说,名字叫做LISTENER的监听器需要负责SID=ORCL的数据库的连接请求,静态配置的最大问题就是监听器无法知道数据库的真正状态。

    2.2、动态注册。

    除了静态配置,Oracle数据库还可以动态地像监听器注册。动态注册是在instance启动的时候PMON进程根据init.ora中的INSTANCE_NAME,SERVICE_NAMES两个参数将实例和服务动态注册到listener中。要想使用动态注册功能,首先需要在数据库的初始化SERVICE_NAME和INSTANCE_NAME。如果没有定义SERVER_NAME参数,数据库会使用DB_NAME和DB_DOMAIN组成的一个全局数据库名称(Global Database Name)注册到监听器中。INSTANCE_NAME是实例名称,通常和SID值一样。

    只要数据库处于运行状态,PMON进程就会自动、定期的地向监听进程注册、更新信息,DBA也可以使用下面命令强制PMON立即向监听器注册:

    SQL>alert system register;

    System altered.

    静态配置和动态注册二者在监听器中的表现状态不一样,这一点可以利用Oracle提供的lsnrctl工具来验证。比如在下面查看结果中,有两个ORCL条目,这两个条目对应的是同一个数据库,只不过记录的生成方式不一同。第一条目的状态是UNKNOWN,这个条目就是静态配置产生的,而第二条目是READY,这个条目是动态注册生成的。

    在数据库处于运动状态时,如果执行lsnrctl status命令来查看监听器状态,可以看到两个条目。注意两种方式的状态区别:静态配置的状态是UNKNOWN,动态注册的状态是READY。

    C:\Documents and Settings\Administrator>lsnrctl start

    LSNRCTL for 32-bit Windows: Version 10.1.0.2.0 - Production on 28-10月-2011 22:04:52

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

    Starting tnslsnr: please wait...

    TNSLSNR for 32-bit Windows: Version 10.1.0.2.0 - Production

    System parameter file is C:\oracle\product\10.1.0\Db_1\network\admin\listener.ora

    Log messages written to C:\oracle\product\10.1.0\Db_1\network\log\listener.log

    Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.104)(PORT=1521)))

    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.104)(PORT=1521)))

    STATUS of the LISTENER

    ------------------------

    Alias LISTENER

    Version TNSLSNR for 32-bit Windows: Version 10.1.0.2.0 - Production

    Start Date 28-10月-2011 21:54:57

    Uptime 0 days 0 hr. 0 min. 0 sec

    Trace Level off

    Security ON: Local OS Authentication

    SNMP OFF

    Listener Parameter File C:\oracle\product\10.1.0\Db_1\network\admin\listener.ora

    Listener Log File C:\oracle\product\10.1.0\Db_1\network\log\listener.log

    Listening Endpoints Summary...

    (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.104)(PORT=1521)))

    Services Summary...

    Service "ORCL" has 1 instance(s).

    Instance "ORCL", status UNKNOWN, has 1 handler(s) for this service...

    Service " ORCL " has 1 instance(s).

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

    The command completed successfully

    现在关闭数据库,然后再次查看监听器的状态。现在命令结果就只剩下一个条目了,这个条目的状态是UNKNOWN,很显然这二个条目对应的是静态配置产生的,而动态注册的那个条目随着数据库的关闭已经自动消失了。

    C:\Documents and Settings\Administrator>lsnrctl start

    LSNRCTL for 32-bit Windows: Version 10.1.0.2.0 - Production on 28-10月-2011 22:14:51

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

    Starting tnslsnr: please wait...

    TNSLSNR for 32-bit Windows: Version 10.1.0.2.0 - Production

    System parameter file is C:\oracle\product\10.1.0\Db_1\network\admin\listener.ora

    Log messages written to C:\oracle\product\10.1.0\Db_1\network\log\listener.log

    Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.104)(PORT=1521)))

    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.104)(PORT=1521)))

    STATUS of the LISTENER

    ------------------------

    Alias LISTENER

    Version TNSLSNR for 32-bit Windows: Version 10.1.0.2.0 - Production

    Start Date 28-10月-2011 21:54:57

    Uptime 0 days 0 hr. 0 min. 0 sec

    Trace Level off

    Security ON: Local OS Authentication

    SNMP OFF

    Listener Parameter File C:\oracle\product\10.1.0\Db_1\network\admin\listener.ora

    Listener Log File C:\oracle\product\10.1.0\Db_1\network\log\listener.log

    Listening Endpoints Summary...

    (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.104)(PORT=1521)))

    Services Summary...

    Service "ORCL" has 1 instance(s).

    Instance "ORCL", status UNKNOWN, has 1 handler(s) for this service...

    The command completed successfully

    从这个实验已经很明显地看出动态注册和静态配置的区别了:动态注册机制不需要对监听器做任何额外配置,而结果却比静态注册更准确。静态配置机制需要针对每个数据库都做额外的配置,但是结果却不准确。

    除此之外,在RAC环境中中,动态注册还包括每个实例的负载信息,这也是RAC能够实现负载均衡、故障转移的基础。

    3、LSNRCTL命令

    Oracle提供了一个叫做lsnrctl的工具来管理监听进程。我们刚刚演示了查看状态的方法,数据库的状态可以有3种。

    READY:代表实例可以接受连接请求;

    BLOCKED:实例目前不能接受连接请求;

    UNKNOWN:这个条目是通过静态注册、而不是动态注册的。

    Lsnrctl命令可以使用很多个参数,具体可通过help命令查看。

    日常工作中最常用的选项包括start启动监听器,stop停止监听器,status报告监听器状态,reload重新加载listener.ora配置文件,不需重新启动监听器就使配置立即生效。

    QUEUESIZE参数

    如果监听器经常同时收到大量的连接请求,这时可以使用这个参数增大监听器的队伍长度,这个长度默认是5,见一下例子:

    LISTENER =

    (DESCRIPTION_LIST =

    (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.51)(PORT = 1521)(QUEUESIZE=20))

    )

    )

  • 相关阅读:
    CSRF 攻击原理及防护
    XSS 攻击原理及防护
    git 基础命令大全
    vue3.0 VS vue2.0
    Android eMMC Booting[wiki百科]
    Android Fastboot[wiki百科]
    Android View.onMeasure方法的理解[转]
    某android游戏逆向小记
    Android网络编程—同时上传参数和文件到服务器 [转载]
    apk自我保护的一种实现方式——运行时自篡改dalvik指令【转载】
  • 原文地址:https://www.cnblogs.com/czjie/p/2228196.html
Copyright © 2011-2022 走看看