ITPub博客

首页 > Linux操作系统 > Linux操作系统 > listener 动态注册和静态注册

listener 动态注册和静态注册

原创 Linux操作系统 作者:fengjin821 时间:2009-06-12 18:43:14 0 删除 编辑


首先对初学者要明确一下listener是在db server上配置,凡是在client端要
连接db都需要通过listener,就像非本单位员工要想进入该单位所在的办公大楼
必须去保安那里登记一下自己的信息(亮名自己的身份同时说出来要找谁、办什么事儿),
之后保安打电话和你要找的人进行确认和求证。
这里不打算介绍lsnrctl中的内容,这个doc上有,而且也比较简单,重点
介绍一下pub上经常人们问到的一些和net相关的或者说可能是困扰初学者
的一些不太容易掌握的问题:


a)静态注册的监听配置时到底在"全局数据库"一项中输入什么?


这里再次明确一下输入什么都可以,举例:


listener文件配置如下:
LISTENER1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = xys)(PORT = 1521))
  )

SID_LIST_LISTENER1 =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = test)
      (ORACLE_HOME = E:\oracle\product\10.2.0\db_1)
      (SID_NAME = test)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = a) --a是一个和我操作的db无关的信息
      (ORACLE_HOME = E:\oracle\product\10.2.0\db_1)
      (SID_NAME = test)
    )
  )


--==========================
status信息如下:
LSNRCTL> status listener1
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xys)(PORT=1521)))
LISTENER 的 STATUS
------------------------
别名                      listener1
版本                      TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
启动日期                  31-5月 -2009 20:35:44
正常运行时间              0 天 0 小时 1 分 29 秒
跟踪级别                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
监听程序参数文件          e:\oracle\product\10.2.0\db_1\network\admin\listener.o
ra
监听程序日志文件          e:\oracle\product\10.2.0\db_1\network\log\listener1.lo
g
监听端点概要...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xys)(PORT=1521)))
服务摘要..
服务 "a" 包含 1 个例程。
  例程 "test", 状态 UNKNOWN, 包含此服务的 1 个处理程序...


服务 "test" 包含 2 个例程。
  例程 "test", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
  例程 "test", 状态 READY, 包含此服务的 1 个处理程序...


命令执行成功
LSNRCTL>
--========================================


从listener的status我们发现存在[服务 "a"]和[服务 "test"]两项信息,
其中[例程 "test", 状态 UNKNOWN],[例程 "test", 状态 UNKNOWN]就是通过读取
listener.ora文件中我们静态登记的信息来注册listener的:


这里[服务 "a"]和[服务 "test"]中的a和test就是listener.ora中的GLOBAL_DBNAME(再次声明
写什么都可以),


[例程 "test"]中的test是指listener.ora中的sid,这里一定不能写错,写错了,配置listener肯定没有
问题不会出错,但是肯定不能通过其配置的net service连上db,因为其对应的instance根本就不存在。


b)从上面listener的status信息中我们还发现了[服务 "test"]下面还包括了
[例程 "test", 状态 READY]信息,这里的ready表示的是后台进程pmon通过读取参数
service_names在listener上进行了动态注册:


SQL> show parameter service_name

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      TEST
SQL> alter system set service_names=b,c;

系统已更改。

SQL> alter system set instance_name=instance_test;
alter system set instance_name=instance_test
                 *
第 1 行出现错误:
ORA-02095: 无法修改指定的初始化参数


SQL> alter system set instance_name=instance_test scope=spfile;

系统已更改。

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area  167772160 bytes
Fixed Size                  1247900 bytes
Variable Size              67110244 bytes
Database Buffers           96468992 bytes
Redo Buffers                2945024 bytes
数据库装载完毕。
数据库已经打开。


SQL> show parameter service_name

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      B, C
SQL>
--==================================
修改了service_names和instance_name之后再来看listener的status信息:


LSNRCTL> status
正在连接到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
LISTENER 的 STATUS
------------------------
别名                      listener1
版本                      TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
启动日期                  31-5月 -2009 20:35:44
正常运行时间              0 天 0 小时 15 分 25 秒
跟踪级别                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
监听程序参数文件          e:\oracle\product\10.2.0\db_1\network\admin\listener.o
ra
监听程序日志文件          e:\oracle\product\10.2.0\db_1\network\log\listener1.lo
g
监听端点概要...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xys)(PORT=1521)))
服务摘要..
服务 "B" 包含 1 个例程。
  例程 "INSTANCE_TEST", 状态 READY, 包含此服务的 1 个处理程序...
服务 "C"  包含 1 个例程。
  例程 "INSTANCE_TEST", 状态 READY, 包含此服务的 1 个处理程序...
服务 "a" 包含 1 个例程。
  例程 "test", 状态 UNKNOWN, 包含此服务的 1 个处理程序...


服务 "test"  包含 2 个例程。
  例程 "INSTANCE_TEST", 状态 READY, 包含此服务的 1 个处理程序...
  例程 "test", 状态 UNKNOWN, 包含此服务的 1 个处理程序...


命令执行成功
LSNRCTL>
--=====================================


我们发现pmon自动提取service_names的值进行了动态注册,同时注意到
动态注册信息中显示的[例程 "INSTANCE_TEST"],这里的INSTANCE_TEST是instance_name,
另外要注意的是不管参数service_names是否有值,pmon始终会把db_name动态注册到listener上(红色部分)

 

 

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

上一篇: ora-02069
请登录后发表评论 登录
全部评论

注册时间:2009-04-29

  • 博文量
    191
  • 访问量
    505049