最近在做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 秒

跟踪级别                  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))

服务摘要..

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

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

服务 "leiz" 包含 2 个例程。

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

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

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

命令执行成功

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

LISTENER 的 STATUS

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

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

tion

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

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

跟踪级别                  off

安全性                    OFF

SNMP                      OFF

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

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

监听端点概要...

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

服务摘要..

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

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

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

例程 "leiz", 状态 UNKNOWN, 包含此服务的 1 个处理程序...   命令执行成功

3. 一个节点不可以同时启动同样 IPC keys 或者同样 listener port number的listener

即Verify IPC addresses or TCP port numbers are not duplicated

a. 一个节点可以启动多个不同端口的listener   e.g.

[oracle@rac1 admin]$ more listener.ora

LISTENER_1522 =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = rac1.domain.com)(PORT = 1522))

)

)

LISTENER_1521 =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = rac1.domain.com)(PORT = 1521))

)

)

SID_LIST_LISTENER_1522 =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

(PROGRAM = extproc)

)

(SID_DESC =

(SID_NAME = devdb1)

(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

)

)       一个节点可以启动多个不同端口的listener

LSNRCTL> start listener_1521

LSNRCTL> start listener_1522

LSNRCTL> status listener_1521           Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac1.domain.com)(PORT=1521)))

STATUS of the LISTENER

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

Alias                    listener_1521           Version                   TNSLSNR for Linux: Version 10.2.0.4.0 - Production

Start Date                17-JUN-2009 21:41:39

Uptime                    0 days 0 hr. 1 min. 0 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora

Listener Log File         /u01/app/oracle/product/10.2.0/db_1/network/log/listener_1521.log

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rac1.domain.com)(PORT=1521)))

Services Summary...

Service "+ASM" has 1 instance(s).

Instance "+ASM1", status BLOCKED, has 1 handler(s) for this service...

Service "+ASM_XPT" has 1 instance(s).

Instance "+ASM1", status BLOCKED, has 1 handler(s) for this service...

Service "devdb" has 1 instance(s).

Instance "devdb1", status READY, has 1 handler(s) for this service...

Service "devdbXDB" has 1 instance(s).

Instance "devdb1", status READY, has 1 handler(s) for this service...

Service "devdb_XPT" has 1 instance(s).

Instance "devdb1", status READY, has 1 handler(s) for this service...

The command completed successfully

LSNRCTL> status listener_1522           Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac1.domain.com)(PORT=1522)))

STATUS of the LISTENER

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

Alias                     listener_1522           Version                   TNSLSNR for Linux: Version 10.2.0.4.0 - Production

Start Date                17-JUN-2009 21:41:48

Uptime                    0 days 0 hr. 0 min. 55 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora

Listener Log File         /u01/app/oracle/product/10.2.0/db_1/network/log/listener_1522.log

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rac1.domain.com)(PORT=1522)))

Services Summary...

Service "PLSExtProc" has 1 instance(s).

Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...

Service "devdb1" has 1 instance(s).

Instance "devdb1", status UNKNOWN, has 1 handler(s) for this service...

The command completed successfully

LSNRCTL> stop listener_1521

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac1.domain.com)(PORT=1521)))

The command completed successfully

LSNRCTL> stop listener_1522

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac1.domain.com)(PORT=1522)))

The command completed successfully

b. 一个节点不可以同时启动同样 listener port number的listener          e.g.

[oracle@rac1 admin]$ more listener.ora

LISTENER_1522 =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = rac1.domain.com)(PORT = 1522))

)

)

LISTENER_1521 =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = rac1.domain.com)(PORT = 1522))

)

)

SID_LIST_LISTENER_1522 =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

(PROGRAM = extproc)

)

(SID_DESC =

(SID_NAME = devdb1)

(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

)

)             一个节点不可以同时启动同样 listener port number的listener

LSNRCTL> start listener_1521             Starting /u01/app/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 10.2.0.4.0 - Production

System parameter file is /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora

Log messages written to /u01/app/oracle/product/10.2.0/db_1/network/log/listener_1521.log

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rac1.domain.com)(PORT=1522)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac1.domain.com)(PORT=1522)))

STATUS of the LISTENER

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

Alias                     listener_1521

Version                   TNSLSNR for Linux: Version 10.2.0.4.0 - Production

Start Date                17-JUN-2009 21:46:12

Uptime                    0 days 0 hr. 0 min. 0 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora

Listener Log File         /u01/app/oracle/product/10.2.0/db_1/network/log/listener_1521.log

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rac1.domain.com)(PORT=1522)))

The listener supports no services

The command completed successfully

LSNRCTL> start listener_1522             TNS-01106: Listener using listener name listener_1521 has already been started

c.一个节点不可以同时启动同样 IPC keys 的listener             e.g.

[oracle@rac1 admin]$ more listener.ora

LISTENER_1522 =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = rac1.domain.com)(PORT = 1522))

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))

)

)

LISTENER_1521 =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = rac1.domain.com)(PORT = 1521))

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))

)

)

SID_LIST_LISTENER_1522 =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

(PROGRAM = extproc)

)

(SID_DESC =

(SID_NAME = devdb1)

(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

)

)             一个节点不可以同时启动同样 IPC keys 的listener

LSNRCTL> start listener_1522             Starting /u01/app/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 10.2.0.4.0 - Production

System parameter file is /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora

Log messages written to /u01/app/oracle/product/10.2.0/db_1/network/log/listener_1522.log

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rac1.domain.com)(PORT=1522)))

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac1.domain.com)(PORT=1522)))

STATUS of the LISTENER

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

Alias                     listener_1522

Version                   TNSLSNR for Linux: Version 10.2.0.4.0 - Production

Start Date                17-JUN-2009 22:09:40

Uptime                    0 days 0 hr. 0 min. 0 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora

Listener Log File         /u01/app/oracle/product/10.2.0/db_1/network/log/listener_1522.log

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rac1.domain.com)(PORT=1522)))

(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...

Service "devdb1" has 1 instance(s).

Instance "devdb1", status UNKNOWN, has 1 handler(s) for this service...

The command completed successfully

LSNRCTL> start listener_1521             Starting /u01/app/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 10.2.0.4.0 - Production

System parameter file is /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora

Log messages written to /u01/app/oracle/product/10.2.0/db_1/network/log/listener_1521.log

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rac1.domain.com)(PORT=1521)))

Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))

TNS-12542: TNS:address already in use

TNS-12560: TNS:protocol adapter error

TNS-00512: Address already in use

Linux Error: 98: Address already in use

Listener failed to start. See the error message(s) above...

Symptoms

There are two or more oracle instances in two seperate oracle homes. Both listeners need to run concurrently. When starting a second listener, a TNS-01106 "Listener using listener name %s has already been started" error is received.

Cause

A second listener process attempted to start with the same IPC key, port address as that of an listener already running.

Solution

Verify IPC addresses or TCP port numbers are not duplicated

#listener.ora file for the first listener

LISTENER =

(ADDRESS_LIST =

(ADDRESS= (PROTOCOL= IPC)(KEY= ORCL))

(ADDRESS= (PROTOCOL= IPC)(KEY= PNPKEY))

(ADDRESS= (PROTOCOL= TCP)(Host= jumbo)(Port= 1521))

)

#listener.ora file for the second listener

LISTENER =

(ADDRESS_LIST =

(ADDRESS= (PROTOCOL= IPC)(KEY= ORCL))

(ADDRESS= (PROTOCOL= IPC)(KEY= PNPKEY))

(ADDRESS= (PROTOCOL= TCP)(Host= jumbo)(Port= 1521))

)

The listener.ora file for the 2nd listener example must have different IPC keys from the first listener.ora file and the port number for the TCP address must be different between any other listener definitions.Implement the changes and restart the listeners

参考文献:

1.Subject:  TNS-01106: "Listener using listener name %s has already been started"

Doc ID:  102430.1 Type:  PROBLEM

Modified Date :  22-JAN-2008 Status:  PUBLISHED

oracle+tns+01106,TNS-01106:Listener using listener name already been started相关推荐

  1. oracle中间人投毒漏洞,Oracle Database Server 'TNS Listener'远程数据投毒漏洞(CVE-2012-1675)的完美解决方法...

    环境:Windows 2008 R2 + Oracle 10.2.0.3 应用最新bundle patch后,扫描依然报出漏洞 Oracle Database Server 'TNS Listener ...

  2. linux数据库no tns,ORA-12541: TNS:no listener

    今天启用Rman 连接数据库报错 ORA-12541: TNS:no listener,开始怀疑监听没有开启于是 lsnrctl  status  查看 [oracle@linux ~]$ lsnrc ...

  3. oracle 12542,TNS-12542: TNS:address already in use

    研发说无法访问数据库,数据库正常运行,那就可能是监听有问题, 一波简单操作搞定. [oracle@entegor-1 ~]$ lsnrctl start LSNRCTL for Linux: Vers ...

  4. oracle中srv添加监听服务,Oracle 11g ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务...

    Oracle 11g ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务 解决过程: 1. 找到listener.ora监听文件,具体位置:D:\app\Administrator ...

  5. oracle里的tns是什么意思

    oracle里的tns是什么意思 参考http://www.jb51.net/article/44668.htm TNS简要介绍与应用 Oracle中TNS的完整定义:transparence Net ...

  6. python连接oracle报错TNS,python连接oracle数据库报出 ORA-12541: TNS: 无监听程序

    答:方法一: 在oracle_home下找到lsnrctl.exe 输入 start 方法二 可能认不到实例名 在cmd下运行 set oracle_sid=自己数据库的实例名(大多数orcl) 网上 ...

  7. PL/SQL developer连接oracle出现“ORA-12154:TNS:could not resolve the connect identifier specified”问题的解决

    PL/SQL developer连接oracle出现"ORA-12154:TNS:could not resolve the connect identifier specified&quo ...

  8. 【解决】用navicat连接 oracle 报错TNS listener could not hand off client connection

    今天在自己电脑上安装oracle11G,然后想用navicat连接试试,监听服务和service服务都打开但是还是链接失败如图所示: 修改好的图: 这里主机,连接类型,端口都是默认的, 服务器名是我安 ...

  9. 【问题集锦】【Oracle】ORA-12518 TNS: listener could not hand off client connection

    这个错误是当前活跃量大于最大量 查看当前活跃量 select count(*) from v$process --当前活跃量 select value from v$parameter where n ...

最新文章

  1. jQuery 中 is() 函数常见使用方法
  2. [技巧]如何获得某个callstack所在线程的线程号?
  3. Effective Java 之个人总结
  4. java a标签正则_正则表达式:java中婚配HTML中a标签中的中文字符
  5. python类变量继承_python 类的成员及继承
  6. 停止尝试使用内部DB框架模拟SQL OFFSET分页!
  7. 离线安装silver light 2
  8. 微擎结合thinkphp5要带上uniacid_传统企业要做网络营销推广找哪家好?
  9. ubuntu编译libid3tag库报错问题解决
  10. azure 导入 bak_使用Azure Data StudioSQL Server数据导入
  11. java9 多版本兼容jar_Java 9 多版本兼容 jar 包
  12. 工厂模式 java 电脑配件_1.Java设计模式-工厂模式
  13. git 本地代码到远程库
  14. sql中的日期函数和case函数
  15. r语言ggplot画两条曲线_如何用R语言绘制生存曲线?
  16. python处理出租车轨迹数据_基于出租车GPS轨迹数据的研究:出租车行程的数据分析...
  17. VS2019 配置OpenGL
  18. 来,创建一个高效的IMEI编码生成器
  19. pb定时器timer
  20. trajan算法求lca 超级详细配图讲解

热门文章

  1. vue 代理重定向_关于vue-router,路由重定向的使用分析
  2. echarts的词云图表类型有哪些_数据可视化之常见12种图表类型分析
  3. 鼠标拖动改变DIV等网页元素的大小的最佳实践
  4. 响应式方案调研及前端开发管理思考
  5. vue菜鸟从业记:完成项目最后一公里之真机测试和打包上线
  6. 开源|蚂蚁金服开源AntV F2:一个专注于移动,开箱即用的可视
  7. Bootstrap定制开发
  8. CSS实现文本周围插入符号
  9. 【DP】【期望】$P1850$换教室
  10. 【Python 19】BMR计算器3.0(字符串分割与格式化输出)