阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

一台Oracle数据库服务器上两个监听同时使用

211次阅读
没有评论

共计 3073 个字符,预计需要花费 8 分钟才能阅读完成。

记得之前 Oracle 原厂的工程师在例行检查时发现一台 Oracle 数据库服务器的上启动了两个监听,分别监听的是 1521 和 1581 端口,而且两个端口都在用,当时当作一个比较奇怪的现象,没有能理解原因是什么。最近几天在看 Oracle 网络配置的文档,无意间在虚拟机上启动了两个监听,就又想起了之前的问题。到底是因为什么原因呢?

下面先来还原一下整个过程。

当时是在做配置静态监听的练习,在 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

远程测试连接成功

一台 Oracle 数据库服务器上两个监听同时使用

这时不小时敲了 lsnrctl start 命令,“神奇”的事情发生了,又一个监听起来了:

一台 Oracle 数据库服务器上两个监听同时使用 使用 netstat -nltp 查端口,两个端口都是被监听的状态:

一台 Oracle 数据库服务器上两个监听同时使用 现在远程测试连接,居然也可以连接成功

一台 Oracle 数据库服务器上两个监听同时使用

那么现在问题就来了,为什么可以启动两个监听,而两个监听都可以用呢?而且我在 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://www.linuxidc.com/Linux/2017-01/139420.htm

官方文档:http://docs.oracle.com/cd/E11882_01/network.112/e41945/listenercfg.htm#NETAG292

更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-06/144477.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计3073字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中