Oracle监听器:动态注册

作者: 千幻流光 | 来源:发表于2017-11-13 14:00 被阅读77次

    本文大部分为转载。

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

    1,动态注册

    动态注册是Oracle上一个不能关闭的功能,注册的动作是监听器所在主机上数据库实例的后台进程PMON完成的。

    实例的background process PMON,每隔一段时间(1~2分钟)就会将实例的参数信息注册到监听器上,实现动态注册。

    注册的信息是数据库参数service_name和instance_name。可以通过Show Parameter命令查看。

    SYS@sales>show parameter instance_name
    
    NAME                                 TYPE                   VALUE
    ------------------------------------ ---------------------- ------------------------------
    instance_name                        string                 sales
    
    SYS@sales>show parameter service_name
    
    NAME                                 TYPE                   VALUE
    ------------------------------------ ---------------------- ------------------------------
    service_names                        string                 a,b
    
    SYS@sales>show parameter domain
    
    NAME                                 TYPE                   VALUE
    ------------------------------------ ---------------------- ------------------------------
    db_domain                            string
    

    一般数据库在建立的时候,这两个参数都是已经设置好的,不会轻易的发生变化。

    如果instance_name参数没有设置,则系统会选取参数db_name作为实例名称返回。如果service_names没有设置,则会将db_namedb_domain两个参数组合成服务名实现注册。

    值得注意的一个问题是,service_names参数是一个可以指定多个服务名称的参数,以逗号分隔。也就是说,一个Oracle实例时可以同时作为多个服务名向外提供服务的。Service_name是Oracle在新近版本中提出,替代SID_NAME的概念。使用Service的指定方式,多个Oracle实例就可以统一提供一致的数据访问服务(也就是RAC)。

    通常,对instance_name和service_name两个参数,还是建议设置上。因为会在一定程度上影响到动态注册的效果。

    如果没有显示的指定这两个参数,那么只有在数据库实例启动在监听器实例之后的时候,才会一次动态注册。一旦之后监听器重新启动,动态注册的信息就不会存在,而且很难再次注册上。所以,我们是推荐将这两个参数设置上的。

    只有显式设置两个值的情况下,PMON才会周期性的将注册信息加以注册。
    此外,也可以通过register强制PMON立即执行一次注册操作。

    SYS@sales>alter system register;
    
    系统已更改。
    

    最后,我们聊一聊动态注册的作用:支持错误转移failover。

    注册操作的发动方是PMON后台进程,PMON是Oracle实例最重要的后台进程,很多资料和DBA都是以该进程的状态确定数据库实例的状态。PMON负责动态注册,如果不能进行动态注册,说明PMON已经失去了工作能力,也就意味着监听程序所服务的实例已经不能工作。

    通过动态注册的机制,监听程序是可以知道所服务的服务器实例已经崩溃,对于客户端的请求,可以实现错误转移。

    当然,这里谈到的崩溃是实例的崩溃。如果监听器程序崩溃了,情况又是另一种样子了。

    2,动态注册的方式

    2.1、缺省的动态注册

    pmon在数据库启动到mount或open时,动态从参数文件中读取service_names值(service_names可以为多个值)。

    service_names缺省为dbca建立数据库时的全局数据库名。

    设置参数service_names为'a,b,c',命令如下:

    alter system set service_names='a,b';
    

    lsnrctl反馈状态如下:

    服务 "Example_1" 包含 1 个实例。
     实例 "sales", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    服务 "a" 包含 1 个实例。
     实例 "sales", 状态 READY, 包含此服务的 1 个处理程序...
    服务 "b" 包含 1 个实例。
     实例 "sales", 状态 READY, 包含此服务的 1 个处理程序...
    服务 "sales" 包含 1 个实例。
     实例 "sales", 状态 READY, 包含此服务的 1 个处理程序...
    

    以上服务名a, b, 都为READY,为动态注册。
    这里多了最后一条"sales",是PMON缺省动态注册到监听器内的。

    注意:不管参数service_names为何值,pmon都会自动以全局数据库名(这里为sales)为服务名,动态注册一个监听。

    缺省情况下,若启用动态注册监听,端口号必须为1521。若启用其他端口的动态监听注册,必须要做相关配置。

    通过查看vsession,状态为SYSUSERS的连接为通过静态注册监听连接到服务器。

    2.2、自定义端口的动态监听注册

    若要启用非默认端口1521的动态监听注册,缺省状态,Oracle不会进行动态注册。要启用动态注册,必须设置local_listener参数。并在服务端配置tnsnames.ora指定监听参数,或者直接通过修改local_listener指定监听参数。步骤如下:

    1)服务端

    netmgr,配置监听程序,监听端口为1525(非默认端口)

    image

    保存配置

    2)、指定监听参数

    (1)方法1:直接通过修改local_listener参数指定

    SQL>alter system set LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.23)(PORT=1525))';
        System altered
    SQL>alter system register
        System altered
    

    (2)方法2

    在Oracle服务器端建立$ORACLE_HOME/network/admin/tnsnames.ora。
    解析文件,位置并填入如下内容

    mytest =
    (DESCRIPTION =
        (ADDRESS_LIST =
            (ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.1.23)(PORT = 1525))
        )
    )
    

    这里的mytest也可以根据自己需要,修改为其他字符串,如a或b等。

    设置参数,指定通过tnsnames.ora内的信息指定监听参数

    SQL>alter system set local_listener=mytest;
    System altered
    SQL>alter system register;
    
    2.3、查看监听器状态
    LSNRCTL> status
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.23)(PORT=1525)))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version 10.2.0.1.0 - Production
    Start Date                15-MAR-2011 10:43:47
    Uptime                    0 days 0 hr. 0 min. 56 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Parameter File   /orahome/oracle/product/10.2.0/db_1/network/admin/listener.ora
    Listener Log File         /orahome/oracle/product/10.2.0/db_1/network/log/listener.log
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oraserver)(PORT=1525)))
    Services Summary...
    Service "a" has 1 instance(s).
      Instance "mydata", status READY, has 1 handler(s) for this service...
    Service "b" has 1 instance(s).
      Instance "mydata", status READY, has 1 handler(s) for this service...
    Service "c" has 1 instance(s).
      Instance "mydata", status READY, has 1 handler(s) for this service...
    Service "mydata" has 1 instance(s).
      Instance "mydata", status READY, has 1 handler(s) for this service...
    Service "mydataXDB" has 1 instance(s).
      Instance "mydata", status READY, has 1 handler(s) for this service...
    Service "mydata_XPT" has 1 instance(s).
      Instance "mydata", status READY, has 1 handler(s) for this service...
    The command completed successfully
    

    相关文章

      网友评论

        本文标题:Oracle监听器:动态注册

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