当启动listener以后,需要将数据库的实例注册到listener以后,客户端才可以进行远程的连接。对默认的listener可以通过pmon进行动态注册,非默认listener是不对其进行注册的,如果需要进行动态注册需要配置,这样比较麻烦。对非默认listener需要添加静态注册,即在listener的配置文件里面指定配置信息。
下面是静态注册的例子,在listener.ora里面加上服务列表
[oracle@Database2 ~]$ vi /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
LISTENER2 = --这个是添加的非1521端口的非默认监听
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
)
)
SID_LIST_LISTENER2 = --给非默认监听添加配置,让其静态注册
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = oradba)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = oradb)
)
)
GLOBAL_DBNAME = oradb默认和db_name一样,SID_NAME是实例名字。
[oracle@Database2 ~]$ lsnrctl stop LISTENER2
[oracle@Database2 ~]$ lsnrctl start LISTENER2
[oracle@Database2 ~]$ lsnrctl status LISTENER2 --可以看到非默认监听静态注册了
Services Summary...
Service "oradba" has 1 instance(s).
Instance "oradb", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
实例状态为 UNKNOWN 值时表明此服务是静态注册的。这时监听器用来表明它不知道关于该实例的任何信息,只有当客户发出连接请求时,才检查该实例是否存在。
在该配置文件里面可以配置多个SID_DESC来添加多个实例和服务。
SID_LIST_LISTENER2 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = oradba)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = oradb)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = orcl)
)
(SID_DESC =
(GLOBAL_DBNAME = ordb)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = oradb)
)
)
[oracle@Database2 ~]$ lsnrctl start LISTENER2
Services Summary...
Service "oradba" has 1 instance(s).
Instance "oradb", status UNKNOWN, has 1 handler(s) for this service...
Service "orcl" has 1 instance(s).
Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
Service "ordb" has 1 instance(s).
Instance "oradb", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
可以看到通过配置多个SID_DESC,可以将多个实例和服务进行静态注册。
静态listener和动态listener这样结合起来可以负载均衡,一部分客户端去连接动态注册的listener,一部分去连接静态listener。静态注册就是直接去配置文件里面将要注册的实例名信息(SID_NAME)和服务名信息(GLOBAL_DBNAME )写进去就行。注意配置信息是SID_LIST_LISTENER2格式,即SID_LIST_+监听名字。
最后注意,默认监听也可以进行静态注册和上面一样,注意SID_LIST_LISTENER要写到LISTENER的下方
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = oradba)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = oradb)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = orcl)
)
(SID_DESC =
(GLOBAL_DBNAME = ordb)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = oradb)
)
)