Oracle非默认监听的动态注册

动态注册
动态注册是在 instance 启动的时候 PMON 进程根据参数文件中的 instance_nameservice_names 两个参数将实例和服务动态注册到 listener 中。首先要在参数文件中指定 instance_name,service_names 两个参数的值。在 sqlplus 下通过 show parameter service_names show parameter instance_name 可以查看这两个参数的值。可选择的是,您可以在 service_names 参数中指定多个服务值,值之间用逗号格开,这对于共享服务器配置是很有用的。

SQL> show parameter name;

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
cell_offloadgroup_name		     string
db_file_name_convert		     string
db_name 			     string	 oradba
db_unique_name			     string	 oradba
global_names			     boolean	 FALSE
instance_name			     string	 oradb
lock_name_space 		     string
log_file_name_convert		     string
processor_group_name		     string
service_names			     string	 oradba

动态注册默认只注册到默认的监听器上(名称是 LISTENER、端口是1521、协议是TCP),因为 pmon 只会动态注册 port 等于1521的监听,否则 pmon 不能动态注册 listener,如果需要向非默认监听注册,则需要配置 local_listener 参数! 

 

下面是非默认及监听动态注册

非默认listener不再使用默认listener的端口号1521,在listerer.ora通过配置下面信息添加一个非默认监听。

[oracle@Database2 ~]$ cat /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
LISTENER2 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1522))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
    )
  )
[oracle@Database2 admin]$ netstat -na | grep :152  --可以看到这里有两个监听,1521端口是默认监听,1522是刚刚添加进去的非默认监听
tcp        0      0 127.0.0.1:36842             127.0.0.1:1522              ESTABLISHED 
tcp        0      0 :::1521                     :::*                        LISTEN      
tcp        0      0 :::1522                     :::*                        LISTEN      
tcp        0      0 ::ffff:127.0.0.1:1522       ::ffff:127.0.0.1:36842      ESTABLISHED 
[oracle@Database2 ~]$ lsnrctl status LISTENER2  查看,启动,关闭非默认监听都要使用非默认监听的名字,如果不加是查看默认listener的状态

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 12-DEC-2019 01:23:44

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1522)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER2
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                11-DEC-2019 22:46:04
Uptime                    0 days 2 hr. 37 min. 40 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/Database2/listener2/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Database2)(PORT=1522)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1522)))
The listener supports no services
The command completed successfully

The listener supports no services

The command completed successfully

可以看到,非默认监听没有任何实例注册进来,因为非默认listener,pmon这个进程是不会对其进行注册的,pmon只会对默认的监听进行实例进行注册。没有注册实例这个listener是不能被使用的。

修改local的值,默认local的值是空,如果想让非默认监听动态注册,那么将该参数改为LISTENER2。

SQL> show parameter local;

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
local_listener			     string
log_archive_local_first 	     boolean	 TRUE
parallel_force_local		     boolean	 FALSE
SQL> alter system set local_listener='LISTENER2';

System altered.

SQL> alter system register;

System altered.

[oracle@Database2 admin]$ lsnrctl status LISTENER2  --可以看到非默认监听已经动态注册Listener Parameter File   /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/Database2/listener2/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Database2)(PORT=1522)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1522)))
Services Summary...
Service "ORCLXDB" has 1 instance(s).
  Instance "oradb", status READY, has 1 handler(s) for this service...
Service "oradba" has 1 instance(s).
  Instance "oradb", status READY, has 1 handler(s) for this service...
The command completed successfully


[oracle@Database2 admin]$ lsnrctl status  --可以看到默认监听已经不再动态注册了

STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                11-DEC-2019 22:41:57
Uptime                    0 days 3 hr. 16 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/Database2/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Database2)(PORT=1521)))
Services Summary...
Service "oradba" has 1 instance(s).
  Instance "oradb", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

可以看到在使用非默认监听动态注册,本地的默认监听就不再动态注册了。默认情况下,远程连接数不是很多的情况下,一般使用默认的listener就行,监听端口号是1521。如果想添加其他listener那么就是非默认listener,从上面可以看到非默认listener pmon是不可以对其进行动态注册的,所以想要非默认listener去动态注册需要上面步骤alter system set local_listener='LISTENER2';这样比较麻烦 ,可以考虑对非默认监听进行静态注册。

 

查询某服务是静态还是动态注册
可以使用命令 lsnrctl status 来查看某服务是静态注册还是动态注册。
• 实例状态为 UNKNOWN 值时表明此服务是静态注册的。这时监听器用来表明它不知道关于该实例的任何信息,只有当客户发出连接请求时,才检查该实例是否存在。
• 实例状态为 READY 或 BLOCKED(数据库 nomount 时)表明是此服务是动态注册的。


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值