oracle+tns+01106,TNS-01106:Listener using listener name already been started

本文讨论了在Oracle数据库中遇到的TNS-01106错误,解释了为何在同一节点上不能启动具有相同端口或IPC密钥的监听器,并通过实验展示了监听器注册实例的多种情况。解决方案是确保每个监听器的IPC地址或TCP端口不重复。
摘要由CSDN通过智能技术生成

最近在做HACMP双机互备切换测试的时候,发现一个问题:

A节点的listener端口为1521 ,B节点的listener端口为1522,为什么两个节点的监听要用不同的端口号?

当时AB机使用不同端口是基于如下考虑:

HACMP的切换数据库的过程中,希望同时控制监听的启动和停止,如果两个数据库使用同一个监听,考虑如下情况

监听在A机和B都正常运行在1521

A机故障,db1切换到B机,先关闭A机的监听,文件系统切换到B机,db1在B机启动,启动监听,提示端口已被占用,可以忽略,因为A的实例会动态注册到可用的listener中去。

A机修复,db1会优先切换回A机,如果脚本中这时关闭B机监听,虽然不会影响B机已经连接的客户端,但是如果B机有新客户端连接,将不能连接到B机的数据库。

问题:为什么在一个节点上不能同时起两个同一端口的listener呢?(这个问题困惑我好久了,就连做梦都在问为什么?)

回答:其实不光是不能同时起动端口相同的listener,在listener.ora文件中,同一个KEY值的listener也是不可以同时启动的,就类似于是listener的唯一标识。即IPC addresses(KEY) or TCP port numbers are not duplicated.

在考虑这个问题的过程中,做了一些有关listener的实验,在这里与大家分享

1. 一个端口的listener可以注册多个实例

(备注:这个当然了,比如我们在一个节点上安装多个实例)

e.g.

LSNRCTL> status

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.15.99)(PORT=1521)))

LISTENER 的 STATUS

------------------------

别名                      LISTENER

版本                      TNSLSNR for 32-bit Windows: Version 9.2.0.1.0 - Produc

tion

启动日期                  08-6月 -2009 09:17:22

正常运行时间              4 天 0 小时 25 分 6 秒

跟踪级别                  off

安全性                    OFF

SNMP                      OFF

监听器参数文件          d:\oracle\network\admin\listener.ora

监听器日志文件          d:\oracle\network\log\listener.log

监听端点概要...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.15.99)(PORT=1521)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=leiz)(PORT=8080))(Presentation=HTTP)

(Session=RAW))

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=leiz)(PORT=2100))(Presentation=FTP)(

Session=RAW))

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=leiz)(PORT=8080))(Presentation=HTTP)

(Session=RAW))

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=leiz)(PORT=2100))(Presentation=FTP)(

Session=RAW))

服务摘要..

服务 "PLSExtProc" 包含 1 个例程。

例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...

服务 "leiz" 包含 2 个例程。/*实例LEIZ*/

例程 "leiz", 状态 UNKNOWN, 包含此服务的 1 个处理程序.../*静态注册*/

例程 "leiz", 状态 READY, 包含此服务的 1 个处理程序.../*动态注册*/

服务 "leiz2" 包含 2 个例程。/*实例LEIZ2*/

例程 "leiz2", 状态 UNKNOWN, 包含此服务的 1 个处理程序.../*静态注册*/

例程 "leiz2", 状态 READY, 包含此服务的 1 个处理程序.../*动态注册*/   服务 "leiz2XDB" 包含 1 个例程。

例程 "leiz2", 状态 READY, 包含此服务的 1 个处理程序...

服务 "leizXDB" 包含 1 个例程。

例程 "leiz", 状态 READY, 包含此服务的 1 个处理程序...

命令执行成功

2. 一个实例可以同时注册到多个不同端口的listener去

(备注:这个也没问题,比如一个实例注册到多个不同端口的listener中)

e.g.

LSNRCTL> status listener   正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.15.99)(PORT=1521)))

LISTENER 的 STATUS

------------------------

别名                      LISTENER   版本                      TNSLSNR for 32-bit Windows: Version 9.2.0.1.0 - Produc

tion

启动日期                  08-6月 -2009 09:17:22

正常运行时间              4 天 0 小时 13 分 14 秒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值