ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle 监听器学习

oracle 监听器学习

原创 Linux操作系统 作者:regonly1 时间:2009-09-02 15:48:54 0 删除 编辑


关于Oracle动态注册和静态注册的一些实验:
实验平台:oracle 10.2.0.1
据目前所知Oracle 8i(含)以后都推荐使用service_name而不是sid来连接数据库了。
通过service_name连接有几个好处:
1、同个实例可通过多个不同的service_name来连接。而不是像sid一样只能唯一的指定了。
2、可以最大指定255个字符的名称,而不是sid的8个字符限制。

首先说下标准配置下的动态注册过程:
1、Oracle启动实例;
2、监听器启动(lsnrctl start);
3、由pmon进程向监听器进行注册。
      注册的名称从service_names从取出来,然后注册到监听器的hostname:1521上面。
注册的结果就是我们在不用对listener.ora做任何设置的情况下就可以直接登录数据库了。


实验:
显示service_names列表:
sys@ORCL> show parameter service_names;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      orcl,dyndb

sys@ORCL> host lsnrctl service

LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 02-9月 -2009 14:58:07

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

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
  例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    处理程序:
      "DEDICATED" 已建立:0 已被拒绝:0
         LOCAL SERVER
服务 "dyndb" 包含 1 个例程。
  例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
    处理程序:
      "DEDICATED" 已建立:10 已拒绝:0 状态:ready
         LOCAL SERVER
服务 "orcl" 包含 1 个例程。
  例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
    处理程序:
      "DEDICATED" 已建立:10 已拒绝:0 状态:ready
         LOCAL SERVER
....
命令执行成功

以上服务列表中列出了所有已经注册的服务。
可以看到其中有dyndb和orcl列个服务,目前状态是ready的。
由于动态注册是由数据库主动发起到监听器的注册,因此其状态是可以的,所以显示的状态是ready的。
而静态注册是直接配置到listener.ora中的,实际上并不知道此时数据库的状态,所以监听器对该服务器的状态显示是unknown的。

服务在监听器端注册好后,客户端即可通过tnsname.ora到监听器中取对应的service name
以上注册的两个service name可同时使用:
ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = dyndb)
    )
  )
  或者
  HSCUSTOMER =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

  现在如果要新增一个service name,则使用如下命令即可:
alter system set service_names='orcl,dyndb,testdb' scope=memory;
配置完成后,即可用lsnrctl service或lsnrctl status检查状态:
sys@ORCL> host lsnrctl status
........
服务 "testdb" 包含 1 个例程。
  例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功


但是,如果监听器的监听端口不是默认的,数据库就不能注册。
sys@ORCL> host lsnrctl service

LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 02-9月 -2009 15:37:45

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

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
  例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    处理程序:
      "DEDICATED" 已建立:0 已被拒绝:0
         LOCAL SERVER
命令执行成功

没有出现前面配置好的监听服务。

所以就要显式的注册了,这次需要用到local_listenter参数。
alter system set local_listenter = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=8888)))';
然后手动处罚pmon到监听器去注册:
alter system register;

再次查看,发现注册成功:
sys@ORCL> host lsnrctl status

LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 02-9月 -2009 15:39:17

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

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
LISTENER 的 STATUS
------------------------
别名                      LISTENER
版本                      TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production
启动日期                  02-9月 -2009 15:33:31
正常运行时间              0 天 0 小时 5 分 46 秒
跟踪级别                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
监听程序参数文件          e:\oracle\product\10.2.0\db_1\network\admin\listener.ora
监听程序日志文件          e:\oracle\product\10.2.0\db_1\network\log\listener.log
监听端点概要...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=8888)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
  例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "dyndb" 包含 1 个例程。
  例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orcl" 包含 1 个例程。
  例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orclXDB" 包含 1 个例程。
  例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orcl_XPT" 包含 1 个例程。
  例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "testdb" 包含 1 个例程。
  例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功

参考文章:http://www.lansz.com/html/2009/08/service-name-registeration.html

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

上一篇: undo表空间总结
下一篇: oracle to_char函数
请登录后发表评论 登录
全部评论

注册时间:2008-05-10

  • 博文量
    257
  • 访问量
    1022478