pugna
全部博文(171)
分类: Oracle
2013-03-23 21:20:27
Oracle监听器Listener中的服务管理
instance_name为orcldb
db_domain为test
global_name为orcldb.test
listener.ora文件路径:$ORACLE_HOME/network/admin/listener.ora
一、动态注册服务与静态注册服务的区别与区分
Listener监听中的服务有两种,一种是动态注册的(Oracle实例启动后,由实例向Listener注册的),一种是静态注册的(Listener启动时,通过读取listener.ora中的配置而注册的)。
动态注册,是在Oracle实例启动后的1到2分钟由pmon进程完成的。默认注册的服务名称为 instance_name.db_domain 。这个名称不一定与Oracle的global name相同,如手动修改了domain name但未修改global name的情况。
静态注册,是通过读取listener.ora中的配置完成的,并没有与Oracle实例进行交互,所以,在Listener中能看到静态服务,并不代表此服务可用。若此时Oracle实例未启动,客户端请求此服务时就会报 ORA-01034 和 ORA-27101 的错误。
在lsnrctl status和lsnrctl service的结果中,可以区分这两种服务。若在结果中显示实例状态为“状态 READY”或“状态 BLOCKED”的服务为动态注册的;而显示“状态 UNKNOWN”的则为静态注册的监听服务。
[oracle@oracle ~]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 22-3月 -2013 20:28:35
Copyright (c) 1991, 2009, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for Linux: Version 11.2.0.1.0 - Production
启动日期 22-3月 -2013 18:26:35
正常运行时间 0 天 2 小时 1 分 59 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 /opt/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
监听程序日志文件 /opt/oracle/diag/tnslsnr/oracle/listener/alert/log.xml
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle.centos)(PORT=1521)))
服务摘要..
服务 "orcldb.test" 包含 1 个实例。
实例 "orcldb", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orcldb.static" 包含 1 个实例。
实例 "orcldb", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
[oracle@oracle ~]$ lsnrctl service
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 22-3月 -2013 20:23:15
Copyright (c) 1991, 2009, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
服务摘要..
服务 "orcldb.test" 包含 1 个实例。
实例 "orcldb", 状态 READY, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已拒绝:0 状态:ready
LOCAL SERVER
服务 "orcldb.static" 包含 1 个实例。
实例 "orcldb", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已被拒绝:0
LOCAL SERVER
命令执行成功
二、动态注册服务
--查看实例名
show parameter instance_name;
--查看domain name
show parameter domain;
--查看global name
select * from global_name;
--查看本实例对应的服务名
show parameter service_names;
select name from v$services;
select name from dba_services;
--查看所有在监听程序中注册了的监听服务
lsnrctl service
--手动将此实例的动态监听服务(service_names)在监听程序Listener中注册
alter system register;
--修改本实例对应的监听服务名为orcl.centos
alter system set service_names='orcl.centos' scope=both;
--修改本实例对应的监听服务名为aaa和bbb(即aaa和bbb监听服务都对应本实例)
alter system set service_names='aaa,bbb' scope=both;
通过 alter system set service_names 修改后,此实例对应的动态注册服务数量可能只有一个,也可能有多个。
若修改后的值与 instance_name.db_domain 的值相同或为空字符串'',则此实例只有一个动态注册服务,即 instance_name.db_domain 。
若修改后的值为'aaa',而aaa与 instance_name.db_domain 的值不同,则此实例有两个动态注册服务,即 instance_name.db_domain 和 aaa 。
若修改后的值为'aaa,bbb',而aaa和bbb都与 instance_name.db_domain 的值不同,则此实例有三个动态注册服务,即 instance_name.db_domain 、aaa、bbb 。
移除XDB监听服务的方法
--重置dispatchers参数
ALTER SYSTEM RESET dispatchers scope=spfile sid='*';
--此时XDB监听服务还存在
show parameter dispatchers;
select name from dba_services;
lsnrctl service
--最后将监听重启一下即可生效
lsnrctl stop && lsnrctl start
lsnrctl service
动态注册配置示例(listener.ora)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = test)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /opt/oracle
三、静态注册服务部分
静态注册服务无法通过下面的语句查看
show parameter service_names;
select name from v$services;
select name from dba_services;
只能通过lsnrctl status或lsnrctl service查看。
另外,在listener.ora中修改静态注册服务后,必须运行 lsnrctl reload 或 lsnrctl stop && lsnrctl start 后才能生效。
静态注册配置示例(listener.ora)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcldb.test)
(SID_NAME = orcldb)
(ORACLE_HOME = /opt/oracle/product/11.2.0/dbhome_1)
)
)
在多网卡的时候,推荐使用静态服务注册;如果是用默认的动态注册,速度会慢些。
2013-03-21 11:36