ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle listener

oracle listener

原创 Linux操作系统 作者:paynefu 时间:2013-06-29 13:28:06 0 删除 编辑
oracle listener注册方式两种:动态注册和静态注册。
1、静态注册:即实例启动时读取listener.ora文件的配置,将实例和服务注册到监听程序。无论何时启动一个数据库,默认地都有两条信息注册到监听器中:数据库服务器对应的实例和对外服务。 
 如在listener.ora文件中:
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
 
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /db/oracle/product/11.2.0/db_1)
      (PROGRAM = extproc)
    )
   (SID_DESC =
      (GLOBAL_DBNAME = paynepm)  #paynepm为对外服务
      (ORACLE_HOME = /db/oracle/product/11.2.0/db_1)
      (SID_NAME = payne)   #payne为实例名
    )
   (SID_DESC =
      (GLOBAL_DBNAME = paynefu) #paynefu为对外服务
      (ORACLE_HOME = /db/oracle/product/11.2.0/db_1)
      (SID_NAME = payne) #payne为实例名
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.169.0.200)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )

在客户端的tnsnames.ora文件中就可以添加:
 py =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.169.0.200)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = paynepm)
    )
  )

py =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.169.0.200)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = paynefu)
    )
  ) 
 在客户端测试
 
SQL> conn ff/ff@py
已连接。
2、动态注册:instance启动的时候PMON进程根据init.ora中的instance_name,service_names两个参数将实例和服务动态注册到listener中。采取动态注册方法时,listener.ora中的内容如下: 
默认动态注册:

 LSNR1 =

    (DESCRIPTION_LIST =

       (DESCRIPTION =

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

    )

     )

 动态注册默认只注册到默认的监听器上(端口是1521、协议是TCP)因为pmon只会动态注册port等于1521的监听,否则pmon不能动态注册listener,如果需要向非默认监听注册,则需要配置local_listener参数!动态默认注册与非默认注册都是通过local_listener参数来判断的,如果值为空,则是默认注册,若为非空,则是非默认注册。如下:
动态非默认注册(即端口非1521):
Listener.ora中添加:
LSNR2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = paynefu)(PORT = 1522))
  )
再配置local_listener参数:
alter system set local_listener='(ADDRESS = (PROTOCOL = TCP)(HOST = paynefu)(PORT = 1522))';

C:\Documents and Settings\Administrator>lsnrctl status lsnr2

LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 31-5月 -2013 09:
5:35

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

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=paynefu)(PORT=1522)))
LISTENER 的 STATUS
------------------------
别名                      lsnr2
版本                      TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Prod
ction
启动日期                  31-5月 -2013 09:03:57
正常运行时间              0 天 0 小时 1 分 42 秒
跟踪级别                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
监听程序参数文件          D:\oracle\product\10.2.0\db_1\network\admin\listener.
ra
监听程序日志文件          D:\oracle\product\10.2.0\db_1\network\log\lsnr2.log
监听端点概要...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=paynefu)(PORT=1522)))
服务摘要..
服务 "fb" 包含 1 个例程。                 ——————该服务名就是数据库中的service_names.db_domain,如下:
SQL> show parameter db_domain

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

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      fb    (这个service_names可以为多个,就如静态注册中的global_dbname,对外提供服务)

  例程 "fb", 状态 READY, 包含此服务的 1 个处理程序...    ——————实例名
服务 "fbXDB" 包含 1 个例程。
  例程 "fb", 状态 READY, 包含此服务的 1 个处理程序...
服务 "fb_XPT" 包含 1 个例程。
  例程 "fb", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功


建议:一个对外的服务名对应一个客户端,这样有利于网络资源监控、问题的判断

3、如何区分是动态注册还是静态注册?
lsnrctl status一下:
 
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                03-MAY-2013 15:33:22
Uptime                    0 days 0 hr. 16 min. 14 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /db/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File         /db/oracle/diag/tnslsnr/for11g/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.169.0.200)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "paynefu" has 1 instance(s).
  Instance "payne", status UNKNOWN, has 1 handler(s) for this service...
Service "paynepm" has 1 instance(s).
  Instance "payne", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

看到上面的UNKNOWN没? 表示静态注册
的设置这时监听器用来表明它不知道关于该实例的任何信息,只有当客户发出连接请求时,它才检查该实例是否存在。
 
动态注册的数据库通过状态信息中的状态READY或状态BLOCKED(对于一个备用数据库)来指明。不管关闭何时数据库,动态注册的数据库都会动态地从 监听器注销,而与之相关的信息将从状态列表中消失。这样,不管数据库是在运行还是已经关闭,监听器总是知道它的状态。该信息将被用于连接请求的回退和负载平衡。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27135177/viewspace-765105/,如需转载,请注明出处,否则将追究法律责任。

下一篇: ASSM BMB
请登录后发表评论 登录
全部评论

注册时间:2012-08-01

  • 博文量
    26
  • 访问量
    74614