oracle多监听和远程访问注意事项

若想顺利实现在数据库服务器上启动多个监听,需要保证两个前提条件:1.端口号要不同;2.IPC key值要不同。第一前提依照常识很容易理解,因为我们很多时候启动多个监听的目的就是为了在不同的端口上对外提供服务。第二前提有时很容易忽视,例如简简单单的将默认的listener配置信息复制后仅修改了端口号,此时就导致新配置的监听无法启动的问题。简单展示一下由于IPC key相同但端口号不同导致非默认监听无法启动的过程。1.错误的监听配置文件内容$ vi $ORACLE_HOME/network/admin/listener.oralistener= (description= (address=(protocol=tcp)(host=secdb1)(port=1521)) (address=(protocol=ipc)(key=extproc)))listener_1526= (description= (address=(protocol=tcp)(host=secdb1)(port=1526)) (address=(protocol=ipc)(key=extproc)))sid_list_listener= (sid_list= (sid_desc= (sid_name=plsextproc) (oracle_home=/u01/app/oracle/product/10.2.0/db_1) (program=extproc)))2.此时启动默认监听可以成功[oracle@secdb1 admin]$ lsnrctl startLSNRCTL for Linux: Version 10.2.0.1.0 - Production _disibledevent=>Listening _disibledevent=>Connecting to (DESCRIPTION=(address=(protocol=tcp)(host=secdb1)(port=1521)))STATUS of the LISTENER------------------------Alias LISTENERVersion TNSLSNR for Linux: Version 10.2.0.1.0 - ProductionStart Date 8-AUG-2010 14:39:54Uptime 0 days 0 hr. 0 min. 0 secTrace Level offSecurity _disibledevent=> (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=extproc)))Services Summary...Service "plsextproc" has 1 instance(s). Instance "plsextproc", status UNKNOWN, has 1 handler(s) for this service...The command completed successfully3.但在启动listener_1526监听的时候遇到了TNS-01106问题[oracle@secdb1 admin]$ lsnrctl start listener_1526LSNRCTL for Linux: Version 10.2.0.1.0 - Production _disibledevent=>在这种IPC key相同的情况下,listener_1526监听是无法正常启动的。5.问题处理我们可以通过取消listener_1526监听配置中的“(address=(protocol=ipc)(key=extproc))”,或者通过修改key值的方法来解决该问题。1)通过修改IPC key值的方法来处理(1)修改后的listener.ora文件内容如下listener= (description= (address=(protocol=tcp)(host=secdb1)(port=1521)) (address=(protocol=ipc)(key=extproc)))listener_1526= (description= (address=(protocol=tcp)(host=secdb1)(port=1526)) (address=(protocol=ipc)(key=extproc_1526)))sid_list_listener= (sid_list= (sid_desc= (sid_name=plsextproc) (oracle_home=/u01/app/oracle/product/10.2.0/db_1) (program=extproc)))(2)此时启动listener_1526监听成功[oracle@secdb1 admin]$ lsnrctl start listener_1526LSNRCTL for Linux: Version 10.2.0.1.0 - Production _disibledevent=>Listening _disibledevent=>Connecting to (DESCRIPTION=(address=(protocol=tcp)(host=secdb1)(port=1526)))STATUS of the LISTENER------------------------Alias listener_1526Version TNSLSNR for Linux: Version 10.2.0.1.0 - ProductionStart Date 8-AUG-2010 14:46:58Uptime 0 days 0 hr. 0 min. 0 secTrace Level offSecurity _disibledevent=> (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=extproc_1526)))The listener supports no servicesThe command completed successfully2)通过取消IPC key值的方法来处理(1)修改后的listener.ora文件内容如下listener= (description= (address=(protocol=tcp)(host=secdb1)(port=1521)) (address=(protocol=ipc)(key=extproc)))listener_1526= (description= (address=(protocol=tcp)(host=secdb1)(port=1526)))sid_list_listener= (sid_list= (sid_desc= (sid_name=plsextproc) (oracle_home=/u01/app/oracle/product/10.2.0/db_1) (program=extproc)))(2)此时启动listener_1526监听亦可成功[oracle@secdb1 admin]$ lsnrctl start listener_1526LSNRCTL for Linux: Version 10.2.0.1.0 - Production _disibledevent=>Connecting to (DESCRIPTION=(address=(protocol=tcp)(host=secdb1)(port=1526)))STATUS of the LISTENER------------------------Alias listener_1526Version TNSLSNR for Linux: Version 10.2.0.1.0 - ProductionStart Date 8-AUG-2010 14:50:30Uptime 0 days 0 hr. 0 min. 0 secTrace Level offSecurity _disibledevent=>The listener supports no servicesThe command completed successfullyBTW:如果使用的是netca工具创建的两个监听,监听配置文件listener.ora内容属于上述的第二中场景:取消IPC key值的方法。下面是通过netca工具创建的listener.ora文件内容,拷贝在此,供参考。# listener.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora# Generated by Oracle configuration tools.SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1) (PROGRAM = extproc) ) )LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = secdb1.localdomain)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) )LISTENER_1526 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = secdb1.localdomain)(PORT = 1526)) ) )最后记得监听中的
(ADDRESS = (PROTOCOL = TCP)(HOST = secdb1.localdomain)(PORT = 1521))(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
顺序别弄反了,不然客户端将无法连接服务器的1521端口
Tags: 

延伸阅读

最新评论

发表评论