pmon只会动态注册port等于1521的监听,否则pmon不能动态注册listener,要想让pmon动态注册listener,需要设置local_listener参数。 LSNRCTL> start TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xys)(PORT=1522))) 监听端点概要... 监听端点概要... SQL> alter system register; //手动注册 系统已更改。 SQL> 监听端点概要...
local_listener是用在当使用非默认的端口时,PMON进程能够进行动态注册。 我们可以这么设置该值形如,local_listener='(ADDRESS = (PROTOCOL = TCP)(HOST = hostname or ip)(PORT = 1521))' 这里说下该值的一个注意点: 先看下listener.ora的配置吧 SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = G:\oracle\product\10.2.0\db_2) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = orcl1) (SID_NAME = orcl1) (ORACLE_HOME = G:\oracle\product\10.2.0\db_2) (PROGRAM = orcl1) ) )
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) (ADDRESS = (PROTOCOL = TCP)(HOST = fztxt)(PORT = 1521)) ) )
(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = fztxt)(PORT = 1525)) )
SID_LIST_TXT_LIS = (SID_LIST = (SID_DESC = (SID_NAME = orcl1) (ORACLE_HOME = G:\oracle\product\10.2.0\db_2) (PROGRAM = orcl1) ) ) 我们这么设置listener.ora,这样,就有了静态的监听了,包括listener和txt_lis,我们可以通过lsnrctl start txt_lis来启动这个监听,也可以通过lsnrctl status txt_lis来观察这个监听的状态。 当我们设置了listener.ora后,txt_lis还不能被客户端访问,那怎么使这个生效呢,这时我们就要PMON来进行动态注册,这就需要local_listener了。 Local_listener有两种设置: 1、如果我们设置 Alter system set local_listener=’(ADDRESS = (PROTOCOL = TCP)(HOST = fztxt)(PORT = 1525))’。那么,我们只要alter system register;强制PMON注册,就可以实现动态注册了。 2、接下来,来讨论另外一个local_listener的设置: Alter system set local_listener=txt_lis; 那么,PMON能识别出来吗? 答案是不能的,因为PMON不知道去哪里解析这个txt_lis。 那有一种情况:如果我们是在数据宕机的时候修改的local_listener=txt_lis;那这时启动数据库,则会出现: SQL> startup ORA-00119: invalid specification for system parameter LOCAL_LISTENER ORA-00132: syntax error or unresolved network name 'TXT_LIS' 这是因为: 要在服务器上的tnsnames.ora里做设置,来映射listener1 启动时它会去服务端的tnsnames.ora里txt_lis的含义,找不到,解析不了,则会报ora-00132的错误。 那服务端的tnsnames.ora要怎么设置呢? Txt_lis=(ADDRESS = (PROTOCOL = TCP)(HOST = fztxt)(PORT = 1525)) 加上这个就OK了。 接下来我们再做另外的测试: SQL> alter system set local_listener='asdf'; alter system set local_listener='asdf' * 第1行出现错误: ORA-02097:无法修改参数,因为指定的值无效 ORA-00119:系统参数LOCAL_LISTENER的说明无效 ORA-00132:语法错误或无法解析的网络名称'asdf' 说明:local_listener的值不能随便设置,要在listener.ora上有相应的标识 以上是local_listener的设置问题。 另外,就像上面批注里面说的,txt_lis注册的实例和服务跟默认的监听一样,那只要我们设置了alter system set local_listener=…… 这时,我们listener status ,也就是默认的监听的状态,我们发现,动态监听没有了,剩下的静态监听
可以知道,默认的监听就只有静态监听了,动态监听都在等待local_listener所对应的监听了。PMON真是见风使舵啊。 更进一步,我们发现,只要我们成功设置了local_listener的值,包括实例和服务名不和默认监听一样,PMON都会在等待local_listener对应的监听 |