local_listener参数作用

pmon只会动态注册port等于1521的监听,否则pmon不能动态注册listener,要想让pmon动态注册listener,需要设置local_listener参数。


listener.ora内容如下:

****************************************************************************************************************************************************************

SID_LIST_LISTENER =
(SID_LIST =
  (SID_DESC =
    (GLOBAL_DBNAME = orcl)
    (ORACLE_HOME = E:oracleproduct10.2.0db_1)
    (SID_NAME = orcl)
  )
  (SID_DESC =
    (GLOBAL_DBNAME = test)
    (ORACLE_HOME = E:oracleproduct10.2.0db_1)
    (SID_NAME = test)
  )
)


LISTENER2=
(DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = xys)(PORT = 1522))
)

****************************************************************************************************************************************************************

端口为1522时尝试:

****************************************************************************************************************************************************************

LSNRCTL2> start
启动tnslsnr: 请稍候...


TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production
系统参数文件为e:oracleproduct10.2.0db_1networkadminlistener.ora
写入e:oracleproduct10.2.0db_1networkloglistener.log的日志信息
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xys)(PORT=1522)))


正在连接到(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xys)(PORT=1522)))
LISTENER2 的STATUS
------------------------
别名 LISTENER2
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production
启动日期 25-10月-2008 20:39:07
正常运行时间 0 天 0 小时 0 分 3 秒
跟踪级别 off
安全性 ON: Password or Local OS Authentication SNMP OFF
监听程序参数文件e:oracleproduct10.2.0db_1networkadminlistener.ora
监听程序日志文件e:oracleproduct10.2.0db_1networkloglistener.log


监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xys)(PORT=1522)))
服务摘要..
服务"orcl" 包含1 个例程。
例程"orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务"test" 包含1 个例程。
例程"test", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
--因为listener.ora中port是1522而非默认的1521,因此此时pmon不会动态注册监听
 
SQL> alter system register;    //就算手动强制注册,下面还是没有动态注册


系统已更改。
LSNRCTL2> status
正在连接到(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xys)(PORT=1522)))
LISTENER2 的 STATUS
------------------------
别名 LISTENER2
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production
启动日期 25-10月-2008 20:22:50
正常运行时间 0 天 0 小时 0 分 7 秒
跟踪级别 off
安全性 ON: Password or Local OS Authentication
SNMP OFF
监听程序参数文件e:oracleproduct10.2.0db_1networkadminlistener.o
ra
监听程序日志文件 e:oracleproduct10.2.0db_1networkloglistener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL= TCP)(HOST=xys)(PORT=1522)))
服务摘要..
服务 "orcl" 包含 1 个例程。
例程 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "test" 包含 1 个例程。
例程 "test", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
**********************************************************************************************************************************************************

没有注册的原因是pmon 缺省只会注册port=1521的listener。如果想让pmon动态注册prot=1521以外的监听,此时需要设置参数local_listener。


Local_listener有两种设置:


方法一、如果我们设置


Alter system set local_listener=’ (ADDRESS = (PROTOCOL = TCP)(HOST = xys)(PORT = 1522))’


那么,我们只要alter system register;强制PMON注册,就可以实现动态注册了。


方法二、接下来,来讨论另外一个local_listener的设置:


Alter system set local_listener= LISTENER2;


那么,PMON能识别出来吗?


答案是不能的,因为PMON不知道去哪里解析这个LISTENER2。


此时如果我们重启动数据库,则会出现:

*************************************************************************************************************************************
SQL> startup
ORA-00119: invalid specification for system parameter LOCAL_LISTENER
ORA-00132: syntax error or unresolved network name 'LISTENER2'
*************************************************************************************************************************************

这是因为:启动时它会去服务端的tnsnames.ora里探寻LISTENER2的含义,找不到,解析不了,则会报ora-00132的错误。


那服务端的tnsnames.ora要怎么设置呢?


LISTENER2=(ADDRESS = (PROTOCOL = TCP)(HOST = xys)(PORT = 1525))


加上这个就OK了。 


另外说明:LISTENER2注册的实例和服务器默认的监听一样,那只要我们设置了alter system set local_listener=……


这时,我们listener status,也就是默认的监听状态,我们发现,动态监听没有了,剩下的静态监听。


可以知道,默认的监听就只有静态监听了,动态监听都在等待local_listener所对应的监听了。PMON真是见风使舵啊。


更进一步,我们发现,只要我们成功设置了local_listener的值,包括实例和服务名不和默认监听一样,PMON都会在等待local_listener对应的监听。

你可能感兴趣的:(转载)