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

简介:

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

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

当时是在做配置静态监听的练习,在listener.ora中配置了一个静态监听:

1
2
3
4
5
6
7
8
9
10
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)))

启动正常:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[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

远程测试连接成功

wKioL1kycoOAJpDsAAApXIpAtIY883.png

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

wKioL1kycxSRqwiCAACdyUHkHT8195.png使用netstat -nltp查端口,两个端口都是被监听的状态:

wKioL1kyc5TyjnA1AAAl7pJ9NaM880.png现在远程测试连接,居然也可以连接成功

wKioL1kyc9qQecbcAAAXGCgc25g054.png

那么现在问题就来了,为什么可以启动两个监听,而两个监听都可以用呢?而且我在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





      本文转自hbxztc 51CTO博客,原文链接:http://blog.51cto.com/hbxztc/1931954,如需转载请自行联系原作者





相关文章
|
2月前
|
存储 Oracle 关系型数据库
服务器数据恢复—光纤存储上oracle数据库数据恢复案例
一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。
|
2月前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle RMAN的目录数据库
Oracle RMAN默认将备份元信息存储在控制文件中,但控制文件损坏或丢失会导致恢复失败,且备份增多会使控制文件无限增长。为解决这些问题,Oracle引入了RMAN目录数据库(Catalog Database),专门用于存储RMAN备份的元信息。使用目录数据库可提升备份管理效率,支持多数据库共享、长期备份历史记录存储,并可保存RMAN脚本。本文详细介绍了如何创建目录数据库、注册目标数据库及其操作步骤。
|
5月前
|
Oracle 安全 关系型数据库
【Oracle】使用Navicat Premium连接Oracle数据库两种方法
以上就是两种使用Navicat Premium连接Oracle数据库的方法介绍,希望对你有所帮助!
1095 28
|
3月前
|
存储 Oracle 关系型数据库
oracle数据恢复—oracle数据库执行错误truncate命令的数据恢复案例
oracle数据库误执行truncate命令导致数据丢失是一种常见情况。通常情况下,oracle数据库误操作删除数据只需要通过备份恢复数据即可。也会碰到一些特殊情况,例如数据库备份无法使用或者还原报错等。下面和大家分享一例oracle数据库误执行truncate命令导致数据丢失的数据库数据恢复过程。
|
5月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回数据库
Oracle闪回数据库功能类似于“倒带按钮”,可快速将数据库恢复至 earlier 状态,无需还原备份。本文介绍了闪回数据库的使用方法及实战案例:包括设置归档模式、开启闪回功能、记录SCN号、执行误操作后的恢复步骤等。通过具体 SQL 操作演示了如何利用闪回数据库恢复被误删的用户数据。注意,使用此功能前需确保数据库为归档模式。
159 9
|
6月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle数据库的闪回表
本文介绍了Oracle数据库中的闪回表(Flashback Table)功能,它能够将表的数据快速恢复到特定时间点或系统改变号(SCN),无需备份。文章通过实战示例详细演示了如何使用闪回表恢复数据,包括授权、创建测试表、记录时间与SCN号、删除数据、启用行移动功能、执行闪回操作以及验证恢复结果等步骤。同时,还展示了如何通过触发器禁止插入操作,并在闪回过程中处理触发器的启用问题。文末附有视频讲解,帮助读者更好地理解闪回表的使用方法。
228 10
|
6月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle数据库的闪回查询
本文介绍了Oracle数据库的闪回查询(Flashback Query)功能及其实际应用。闪回查询通过`AS OF`子句,结合时间戳或SCN号,可查询历史数据状态,帮助分析数据差异。文中通过具体示例演示了如何使用闪回查询:创建测试表、记录当前SCN号、更新数据并提交事务,最后通过闪回查询获取历史数据。附带的视频和代码块详细展示了操作步骤与结果。
221 4
|
6月前
|
Oracle 关系型数据库 网络安全
崖山异构数据库迁移利器YMP初体验-Oracle迁移YashanDB
文章是作者小草对崖山异构数据库迁移利器 YMP 的初体验分享,包括背景、YMP 简介、体验环境说明、YMP 部署(含安装前准备、安装、卸载、启动与停止)、数据迁移及遇到的问题与解决过程。重点介绍了 YMP 功能、部署的诸多细节和数据迁移流程,还提到了安装和迁移中遇到的问题及解决办法。
|
6月前
|
Oracle 关系型数据库 数据管理
【赵渝强老师】Oracle数据库的闪回技术
在Oracle数据库操作中,难免会遇到误删表或提交错误事务等问题,可能导致数据丢失甚至数据库停止运行。传统解决方法依赖备份恢复,但需提前准备正确备份。为此,Oracle提供了闪回技术,无需备份即可快速恢复数据。它支持7种类型的操作,如闪回查询、版本查询、表恢复等,能有效应对逻辑损坏和用户错误。闪回技术基于还原(undo)数据管理,启用自动管理后可实现高效恢复。
174 0

热门文章

最新文章

推荐镜像

更多