1.前言
从Oracle 8i开始,Oracle引入了动态服务注册(Dynamic Service Registration)的功能,所谓动态注册是指当实例启动之后,由后台进程Pmon在监听器中注册数据库服务信息,在动态注册机制下,原来监听器中的SID_LIST部分将不再需要。
2.简化配置
服务注册可以减化监听器的配置,SID_LIST_<listener_name>参数将不再需要
3.连接时Failover
在动态注册时,有数据库主动向监听器注册实例,因此监听器总是可以知道实例的状态,在RAC环境下,当某个数据库出现故障时,动态服务注册功能可以快速地Failover客户端请求到其他实例;而如果在静态注册模式下,监听器将首先启动一个专用服务器进程接受客户端请求,然后向数据库服务器发起连接,随后才能发现实例已经停止,给出“Oracle not available”的错误提示,这个过程要缓慢低效的多。
4.运行时连接负载均衡
服务注册使得监听能够向负载最轻的实例转发连接请求,从而实现运行时连接的负载均衡。
动态注册在Oracle 9i里是自动启用的,监听器文件可以不再需要,或者可以配置一个经过极大简化的监听器文件。现在一个简单的监听器配置可能类似如下实例(缺省的监听PLSExtProc是为外部存储过程调用而配置的):
[oracle@node04 admin]$ cat listener.ora # listener.ora Network Configuration File: /data/oracle/product/11.2.0/db_1/network/admin/listener.ora # Generated by Oracle configuration tools. LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.40.2)(PORT = 1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /data/oracle/product/11.2.0/db_1) (PROGRAM = extproc) ) ) ADR_BASE_LISTENER = /data/oracle
[oracle@node04 admin]$ cat tnsnames.ora # tnsnames.ora Network Configuration File: /data/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora # Generated by Oracle configuration tools. LISTENER_ORCL = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.40.2)(PORT = 1521)) ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.40.2)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )
以上是专用服务器模式下的配置
5.RAC模式的监听
后续再补。。。