Oracle参数—local_listener参数作用 (2012-0

on只会动态注册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))
)

 

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.oraport1522而非默认的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 缺省只会注册port1521listener。如果想让pmon动态注册prot1521以外的监听,此时需要设置参数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对应的监听。

你可能感兴趣的:(Oracle参数—local_listener参数作用 (2012-0)