重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
记得之前Oracle原厂的工程师在例行检查时发现一台Oracle数据库服务器的上启动了两个监听,分别监听的是1521和1581端口,而且两个端口都在用,当时当作一个比较奇怪的现象,没有能理解原因是什么。最近几天在看Oracle网络配置的文档,无意间在虚拟机上启动了两个监听,就又想起了之前的问题。到底是因为什么原因呢?
目前创新互联已为上1000+的企业提供了网站建设、域名、虚拟空间、网站托管、服务器租用、企业网站设计、通州网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。下面先来还原一下整个过程。
当时是在做配置静态监听的练习,在listener.ora中配置了一个静态监听:
ORCL = (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.2)(PORT=1581)) SID_LIST_ORCL= (SID_LIST= (SID_DESC= (GLOBAL_DBNAME=orcl) (ORACLE_HOME=/u02/app/oracle/product/11.2.4/db1) (SID_NAME=orcl)))
启动正常:
[oracle@rhel6 admin]$ lsnrctl start orcl LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 03-JUN-2017 16:22:41 Copyright (c) 1991, 2013, Oracle. All rights reserved. Starting /u02/app/oracle/product/11.2.4/db1/bin/tnslsnr: please wait... TNSLSNR for Linux: Version 11.2.0.4.0 - Production System parameter file is /u02/app/oracle/product/11.2.4/db1/network/admin/listener.ora Log messages written to /u02/app/oracle/diag/tnslsnr/rhel6/orcl/alert/log.xml Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.2)(PORT=1581))) Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.2)(PORT=1581))) STATUS of the LISTENER ------------------------ Alias orcl Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production Start Date 03-JUN-2017 16:22:41 Uptime 0 days 0 hr. 0 min. 0 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u02/app/oracle/product/11.2.4/db1/network/admin/listener.ora Listener Log File /u02/app/oracle/diag/tnslsnr/rhel6/orcl/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.2)(PORT=1581))) Services Summary... Service "orcl" has 1 instance(s). Instance "orcl", status UNKNOWN, has 1 handler(s) for this service... The command completed successfully
远程测试连接成功
这时不小时敲了lsnrctl start命令,“神奇”的事情发生了,又一个监听起来了:
使用netstat -nltp查端口,两个端口都是被监听的状态:
现在远程测试连接,居然也可以连接成功
那么现在问题就来了,为什么可以启动两个监听,而两个监听都可以用呢?而且我在listener.ora中并没有配置1521端口的监听,为什么可以启动1521的监听呢?
先来看第二个问题,为什么会启动对1521端口的监听,从官方文档中找到这样一名话:
Because all of the configuration parameters have default values, it is possible to start
and use a listener with no configuration. This default listener has a name of LISTENER,
supports no services on startup, and listens on the following TCP/IP protocol address:
(ADDRESS=(PROTOCOL=tcp)(HOST=host_name)(PORT=1521))
这句话就能解释为什么会启动1521端口的监听。我也做了实验,即使是在没有listener.ora文件的情况下,也会可以启动名为LISTENER的监听来监听1521端口。
解释了监听起来的问题,再来看第一个问题,为什么两个监听都可以用呢?
先了解一下动态监听和静态监听:
动态监听是在数据库启动后,PMON进程会向本地的端口注册服务信息,默认是向本地地址的1521端口注册。而前面启动的对1521端口的监听正符合默认的注册方式,所以直接可以注册成功,数据库也可以对外提供服务。
而最开始配置的静态监听的目的就是代替PMON进程注册的工作,直接把数据库的服务强制绑定到监听上,即使数据库没有启动,这个数据库的服务名还是会在监听中显示的。
了解了这些之前,就不难理解为什么两个监听可以同时使用了:数据库默注册到了1521端口的监听上了,而静态监听又强制数据库绑定到了1581端口上,所以两个监听端口都是可以通的。
所以出现这种情况的原因是配置静态监听的时候,使用了是1581端口而非默认的1521端口,而且又启动了默认的监听。如果静态监听使用的1521端口,也不会出现这样的情况。
那如何能避免使用非默认监听端口时出现这种情况呢?可以在数据库中配置local_listener参数,详细参考之前的博客:http://hbxztc.blog.51cto.com/1587495/1890055
官方文档:http://docs.oracle.com/cd/E11882_01/network.112/e41945/listenercfg.htm#NETAG292
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。