在ORACLE数据库工作当中,LISTENER是一个必不可少的进程,设置监听是为了让数据库实例与客户端之间可以建立联系,更准确的说是将客户端的要求准确的送到在此LISTENER注册的数据库服务中去。
动态监听与静态监听
LISTENER分为两种:一种为动态监听(dynamic registration),它的特点是service registration;另一种为静态监听 (static registration)。静态监听可以有多个,但动态监听只能有一个,他与参数local_listener有关。
那他们有什么却别呢?在却别之前,需要提到,这两种监听的配置文件都是<ORACLE_HOME>/network/admin/listener.ora.
动态监听,顾名思义,可以动态的注册数据库服务(service registration),它不需要再配置文件中注明需要监听哪些数据库服务,而是,只要有相应的数据库实例启动,就是自动的、动态的被注册到listener中,然后listener帮助这些实例监听客户端的需求。listener自己不会去管那个实例启动,快来我这里报道,我来帮你监听,它只管监听。完成这项工作的是PMON。
有人会问,那如果在数据库启动后,在启动监听会怎么样?答案是PMON也会把当前启动的数据库实例注册到动态监听中,但是比较慢,需要1分钟左右,如果等不及,可以进入相应的数据库,输入命令:alter system register。
local_listener
动态监听只能有一个,决定它的参数是local_listener,即使local_listener指向的是一个配置好的静态监听,PMON也会动态地将数据库实例注册到进去。
local_listener可以直接指向监听:
SQL> alter system set LOCAL_LISTENER='(ADDRESS = (PROTOCOL = TCP)(HOST = PROD)(PORT = 1521))';
还有一种方法是在tnsnames.ora中添加监听地址,然后将local_listener指向相应的命名,这种方法必须要设置tnsname.ora,否则会报错:
LSNR2 #不区分大小写
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = RPDO)(PORT =1521))
)
SQL> alter system set LOCAL_LISTENER=lsnr;
静态监听,这个就很好理解了,需要在listener启动之前,在配置文件中(listener.ora)注明需要监听的数据库服务,这样listener启动后,它就监听这些服务。
配置listener.ora
那如何配置这两种监听呢?11g在线文档中>Oracle Database Net Services Administrator's Guide>Configuring and Administering Oracle Net Listener中有相关的脚本可以拿来借鉴。
LISTENER设置主要有三个要素:PROTOCOL(协议),HOST(主机名),PORT(端口号)一般是1521
动态监听:
LISTENER=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521))
(ADDRESS=(PROTOCOL=ipc)(KEY=extproc) (queuesize=50))))
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=plsextproc)
(ORACLE_HOME=/oracle11g)
(PROGRAM=extproc)))
无论是动态还是静态,在配置文件中都至少含有两部分:1.listener(上面的的LISTERER,名称可修改);2.SID_LIST_listener_name(SID_LIST_LISTENER)
LISTENER的设置没有太大却别,区别在于SID LIST的却别,动态监听要将SID_NAME=plsextproc,按理来说应该写实例名,但这里调用的就是PMON啦。再有就是PROGRAM=extproc。但经过试验,动态监听不写SID_LIST也可以动态注册。。
启动时效果为:
Services Summary...
Service "plsextproc" has 1 instance(s).
Instance "plsextproc", status UNKNOWN, has 1 handler(s) for this service...
一分钟。。。。。。。。。。
Services Summary...Service "ORCLXDB" has 1 instance(s). Instance "PROD", status READY, has 1 handler(s) for this service...Service "PROD" has 1 instance(s). Instance "PROD", status READY, has 1 handler(s) for this service...Service "plsextproc" has 1 instance(s). Instance "plsextproc", status UNKNOWN, has 1 handler(s) for this service...
静态监听:
LISTENER=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1526))
)
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=PROD)
(ORACLE_HOME=/oracle11g)
(GLOBAL_NAME=PROD)))静态监听,SID_NAME改为实例名,PROGRAM改为GLOBAL_NAME,写数据库名。
启动时效果为:
Services Summary...
Service "ORCLXDB" has 1 instance(s).
Instance "PROD", status READY, has 1 handler(s) for this service...
Service "PROD" has 1 instance(s).
Instance "PROD", status READY, has 1 handler(s) for this service...
本文介绍了Oracle数据库中的监听器概念,包括动态监听与静态监听的区别、配置方法及其应用场景。通过对比两种监听方式的特点,帮助读者更好地理解和配置Oracle数据库的监听器。
844

被折叠的 条评论
为什么被折叠?



