zoukankan      html  css  js  c++  java
  • Oracle一个实例配置多个监听

    要想给一个Oracle实例配置多个监听,首先要定义多个监听器,因为是多个监听,势必会有一些监听端口不是1521.

    现在服务端的listener.ora文件中定义如下监听器:

    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
          (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
        )
      )
    
    L2000 =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 2000))
        )
      )

    一个监听1521端口的默认监听器,一个监听2000端口的监听器L2000. 到现在我们还没有给这两个监听器配置相应的Oracle服务.

    监听器与Oracle服务关联有两种方式,静态注册和动态注册.

    • 动态注册

     动态注册只能注册到默认的1521端口,而这里我们需要一次性的动态注册到两个端口,因为需要使用local_listener.

    先在服务端的tnsnames.ora文件里加入一个描述对象ALL_LISTENER,具体叫什么其实都无所谓的.

    然后会把它赋值给local_listner,这样Pmon才知道往那些指定的IP和端口发送注册请求.

    动态注册的时候,PMon会到tnsnames.ora里面查找描述对象的具体信息,会用到红色的部分信息,蓝色的信息这个时候没有任何用处,但是稍微会讲这个在什么时候使用.

    ALL_LISTENER =
    (    
    DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 2000)) ) (
    CONNECT_DATA = (SERVICE_NAME = orcl.getpaid) ) )

    SQL> alter system set local_listener=ALL_LISTENER;

    系统已更改。

    SQL> alter system register;

    系统已更改。

    其实local_listener也接受直接的地址描述或者地址描述列表.

    SQL> alter system set local_listener='(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1522)))';--更改local_listener后原来注册的服务会取消,然后PMON每隔一分钟重参试注册到新地址.下面我们手动触发注册.

    系统已更改。

    SQL> alter system register; --注册到新的local_listener

    系统已更改。

    SQL> alter system set local_listener='(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 2000))))'; --同时注册到1521 和2000 端口.

    系统已更改。

    SQL> alter system register;

    系统已更改。

    下面是默认监听器的状态,这里看到注册了两个服务L2000.getpaid 和orcl.getpaid

    LSNRCTL> status
    正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
    LISTENER 的 STATUS
    ------------------------
    别名                      LISTENER
    版本                      TNSLSNR for 32-bit Windows: Version 11.2.0.1.0 - Production
    启动日期                  18-7月 -2014 02:01:29
    正常运行时间              0 天 0 小时 0 分 14 秒
    跟踪级别                  off
    安全性                    ON: Local OS Authentication
    SNMP                      OFF
    监听程序参数文件          D:appAdministratorproduct11.2.0dbhome_1
    etworkadminlistener.ora
    监听程序日志文件          d:appadministratordiag	nslsnrpricnessdlisteneralertlog.xml
    监听端点概要...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\.pipeEXTPROC1521ipc)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
    服务摘要..
    服务 "CLRExtProc" 包含 1 个实例。
      实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    服务 "L2000.getpaid" 包含 1 个实例。
      实例 "orcl", 状态 READY, 包含此服务的 6 个处理程序...
    服务 "orcl.getpaid" 包含 1 个实例。
      实例 "orcl", 状态 READY, 包含此服务的 6 个处理程序...
    命令执行成功

    动态注册的服务名为service_name.db_domain, 而我配置了db_domain=getpaid , service_names=ORCL,L2000 ,所以最后动态注册了两个服务.

    SQL> show parameter db_domain

    NAME                                             TYPE                VALUE
    ------------------------------------ ---------------------- ----------------
    db_domain                                      string                getpaid
    SQL> show parameter service_name

    NAME                                             TYPE                 VALUE
    ------------------------------------ ---------------------- ----------------
    service_names                                string                ORCL, L2000

    • 静态注册

    在服务端的listener.ora里对监听器L2000配置静态的服务名称和实例名,下面没有列出默认监听器的配置.

    此时的默认监听器还是监听在1521端口的,而且没有设置local_listener(alter system reset local_listener 可以把local_listener还原成默认值).

    所以Pmon会默认注册到默认监听器的.

    因此我们只需要在给监听在2000端口的L2000配置静态服务,这样就有两个监听器为我们的实例服务了.

    L2000 =
    (DESCRIPTION_LIST =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 2000))
    )
    )

    SID_LIST_L2000 =
     (SID_LIST =
        (SID_DESC =
          (GLOBAL_DBNAME = orcl.getpaid)
          (ORACLE_HOME = D:appAdministratorproduct11.2.0dbhome_1)
          (SID_NAME = orcl)
        )
      )

    这里的GLOBAL_DBNAME=service_name.db_domain,和自动注册是在lsnrclt里看到的服务是一样的.

    LSNRCTL> start l2000
    启动tnslsnr: 请稍候...

    TNSLSNR for 32-bit Windows: Version 11.2.0.1.0 - Production
    系统参数文件为D:appAdministratorproduct11.2.0dbhome_1 etworkadminlistener.ora
    写入d:appadministratordiag nslsnrpricnessdl2000alertlog.xml的日志信息
    监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=2000)))

    正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=0.0.0.0)(PORT=2000)))
    LISTENER 的 STATUS
    ------------------------
    别名 l2000
    版本 TNSLSNR for 32-bit Windows: Version 11.2.0.1.0 - Production
    启动日期 18-7月 -2014 02:36:54
    正常运行时间 0 天 0 小时 0 分 1 秒
    跟踪级别 off
    安全性 ON: Local OS Authentication
    SNMP OFF
    监听程序参数文件 D:appAdministratorproduct11.2.0dbhome_1 etworkadminlistener.ora
    监听程序日志文件 d:appadministratordiag nslsnrpricnessdl2000alertlog.xml
    监听端点概要...
    (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=2000)))
    服务摘要..
    服务 "CLRExtProc" 包含 1 个实例。
    实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    服务 "orcl.getpaid" 包含 1 个实例。
    实例 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    命令执行成功

    • 至此服务器端的监听配置就完成了,客服端的tnsnames.ora 配置文件里加入如下描述符.

    ORCL描述符会把请求发到1521端口的默认监听器,L2000会把请求发到监听2000端口的L2000监听器.

    ORCL =
    (    DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
        (CONNECT_DATA =
        (SERVER = DEDICATED)
        (SERVICE_NAME = orcl.getpaid)
    )
    )

    L2000 =
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 2000))
    )
    (CONNECT_DATA =
    (SERVICE_NAME = orcl.getpaid)
    )
    )

    先用tnsping来测试描述符对应的地址能否连接上,tnsping 只能测试出描述符里对应的地址和端口是否能连上,但是不能判断描述符里的Servie_name是否正确或正常.

    [D:appAdministratorproduct11.2.0dbhome_1]tnsping orcl

    TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 - Production on 18-7月 -
    2014 02:22:13

    Copyright (c) 1997, 2010, Oracle. All rights reserved.

    已使用的参数文件:
    D:appAdministratorproduct11.2.0dbhome_1 etworkadminsqlnet.ora


    已使用 TNSNAMES 适配器来解析别名
    尝试连接 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)
    ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl.getpaid)))
    OK (30 毫秒)

    [D:appAdministratorproduct11.2.0dbhome_1]tnsping l2000

    TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 - Production on 18-7月 -
    2014 02:22:17

    Copyright (c) 1997, 2010, Oracle. All rights reserved.

    已使用的参数文件:
    D:appAdministratorproduct11.2.0dbhome_1 etworkadminsqlnet.ora


    已使用 TNSNAMES 适配器来解析别名
    尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0
    .0)(PORT = 2000))) (CONNECT_DATA = (SERVICE_NAME = L2000.getpaid)))
    OK (0 毫秒)

    用描述符来时间测试连接数据库

    SQL> conn /@l2000 as sysdba
    已连接。
    SQL> conn /@orcl as sysdba
    已连接。

     在我们的tnsnames.ora文件里有个ALL_LISTENER ,当被用来赋值给local_listener的时候,只有ADDRESS_LIST有效,代表要向那些地址的监听器注册.

    当被作为描述符用在客服端的连接请求里是,它会按顺序请求对应的地址上的监听器的对应SERVICE_NAME的服务,如果第一个失败,会参试后面的地址.

    ALL_LISTENER =
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 2000))
    )
    (CONNECT_DATA =
    (SERVICE_NAME = orcl.getpaid)
    )
    )

  • 相关阅读:
    防抖与节流
    两台电脑互联
    es6标签模板转义html
    vue[mini-css-extract-plugin]Conflicting order between 警告解决方式(转载)
    如何解决Windows10处于通知模式(转载)
    hexo与github page搭建博客
    缓动类型参考
    微信代扣-免密支付 开通教程
    Linux服务器安全配置
    在linux (centos)上使用puppeteer实现网页截图
  • 原文地址:https://www.cnblogs.com/princessd8251/p/3852526.html
Copyright © 2011-2022 走看看