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))
)
)
TXT_LIS =
(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 对应的监听。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14730395/viewspace-622056/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/14730395/viewspace-622056/