Oracle 监听之动态和静态注册

Posted ITPUB

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle 监听之动态和静态注册相关的知识,希望对你有一定的参考价值。

点击蓝色字关注 "ITPUB" 一起玩耍哦~


EM 无法使用的解决:首先我们知道 EM 只支持动态注册的监听。哪怕是有动态注册信息就可以。

在考试 11gOCM 的时候,有一道题是要配置两个监听,一个名字是 listener 另一个是 lsnr2, 还需要配置 EM, 首先我先配置了 listener 这个监听,具体配置如下:

LISTENER =
 (DESCRIPTION_LIST =
   (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = edbjr2p1.example.com)(PORT = 1521))
     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
   )
 )

很显然这个是动态监听,正好这时候我用这个监听配置了 EM。

EM 配置完成之后,我继续配置 lsnr2 , 具体配置如下:

LSNR2 =
 (DESCRIPTION_LIST =
   (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = edbjr2p1.example.com)(PORT = 1526))
     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1526))
   )
 )

要求要 lsnr 也能动态注册到数据库信息,这时候我们发现这个监听的端口非默认端口。然而 oracle 默认动态是注册到 1521 端口上的,所有这时候 lsnr2 是不能动态注册到数据库信息的,如下:

[oracle@edbjr2p1 admin]$ lsnrctl status lsnr2 

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 05-JUL-2016 23:34:29

Copyright (c) 1991, 2011, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=edbjr2p1.example.com)(PORT=1526)))
STATUS of the LISTENER
------------------------
Alias lsnr2
Version TNSLSNR for Linux: Version 11.2.0.3.0 - Production
Start Date 05-JUL-2016 23:34:06
Uptime 0 days 0 hr. 0 min. 22 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/edbjr2p1/lsnr2/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=edbjr2p1.example.com)(PORT=1526)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1526)))
The listener supports no services
The command completed successfully


可以通过  local_listener 这个参数来修改 oracle 默认动态注册的端口,使 lsnr2 可以动态注册到信息。

1. 在 tnsname.ora 文件里添加

LSNR2 =
 (DESCRIPTION_LIST =
   (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = edbjr2p1.example.com)(PORT = 1526))
     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1526))
   )
 )


2. 然后 修改数据库参数

sqlplus  / as sysdba
SQL> alter system set local_listener='lSNR2';
SQL> alter system register;     ### 动态监听如果先于数据库启动,那就不必要执行这个命令。


3. 再次查看监听状态,发现动态注册到了信息

[oracle@edbjr2p1 admin]$ lsnrctl status lsnr2 
。。。。。。。
Services Summary...Service "PROD1.us.oracle.com" has 1 instance(s).Instance "PROD1", status READY, has 1 handler(s) for this service...Service "PROD1XDB.us.oracle.com" has 1 instance(s).Instance "PROD1", status READY, has 1 handler(s) for this service...The command completed successfully


这样我觉得 OK 了,可是等到后面使用 EM 的时候,我发现报错,说 database  is  down,

可是我检查发现数据库正常, 然后查看监听 listener 的状态:发现原本动态注册的信息已经没有了。如下:

[oracle@edbjr2p1 admin]$ lsnrctl status  

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 05-JUL-2016 23:34:29

Copyright (c) 1991, 2011, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=edbjr2p1.example.com)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias listener
Version TNSLSNR for Linux: Version 11.2.0.3.0 - Production
Start Date 05-JUL-2016 23:34:06
Uptime 0 days 0 hr. 0 min. 22 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/edbjr2p1/lsnr2/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=edbjr2p1.example.com)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1526)))
The listener supports no services
The command completed successfully


可以推测出可能是这里的原因导致报错 :database is down

那么是什么原因导致的呢?

原来 当你设置 local_listener=lsnr2 后,数据库信息就会动态的注册到 1526 端口,他就不会动态的注册到 1521,所以 listener 这个监听注册不到信息,导致 EM 链接不到数据库,报错  database is down。
 
解决办法:只需要修改参数 local_listener='listener','lsnr2';   即可,这样 oracle 会动态注册到两个端口上。

然后发现 EM 可以使用了。

02



关于 oracle 监听动态和静态的分析

oracle 静态监听如下:

[oracle@edbjr2p1 admin]$ cat listener.ora 
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = edbjr2p1.example.com)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=PROD1)
(ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME=PROD1))
(SID_DESC=
(SID_NAME=plsextproc)
(ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
(PROGRAM=extproc)))


尽管是静态监听,但是他也会有动态注册信息,如下  ready 代表动态,unknown 代表静态。如果你刚才用这样的话已经配置好的 EM 是可以使用这个监听的,可不要认为静态监听也可以了,真正的原因是虽然是静态监听配置,但是 oracle 会默认动态的注册到 1521 这个端口上,所以既有动态又有静态的注册信息(前提是没有修改 local_listener 这个参数)

[oracle@edbjr2p1 admin]$ lsnrctl status 

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 05-JUL-2016 23:45:04

Copyright (c) 1991, 2011, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=edbjr2p1.example.com)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.3.0 - Production
Start Date 05-JUL-2016 23:43:44
Uptime 0 days 0 hr. 1 min. 20 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/edbjr2p1/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=edbjr2p1.example.com)(PORT=1521)))
 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "PROD1" has 1 instance(s).
 Instance "PROD1", status UNKNOWN, has 1 handler(s) for this service...
Service "PROD1.us.oracle.com" has 1 instance(s).
 Instance "PROD1", status READY, has 1 handler(s) for this service...
Service "PROD1XDB.us.oracle.com" has 1 instance(s).
 Instance "PROD1", status READY, has 1 handler(s) for this service...
Service "plsextproc" has 1 instance(s).
 Instance "plsextproc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully


如果你配置 EM 使用的监听没有动态注册信息,那么当你使用 EM 的时候就会报错,具体如下:

03


小结: EM 管理器,配置和使用只支持动态注册的监听,如果你刚开始是用动态注册的监听配置好了 EM,你又把动态的监听改成了静态的,这时候你没有修改 local_listener 这个参数,正常情况还是可以使用 EM 的,因为这时候你的监听既有静态注册信息又有动态注册信息,EM 使用的是动态信息,说白了就是保证有动态注册的信息即可。

作者:贺子_DBA 时代
链接: http://blog.itpub.net/29654823/viewspace-2121591/

Oracle 监听之动态和静态注册


Oracle 监听之动态和静态注册

数领先机 智赢未来

DTCC2018

中国数据库技术大会(简称 DTCC)是国内数据库及大数据领域规模最大、最受欢迎的技术交流盛会,每年一届。自 2010 年以来,迄今已成功举办了八届,累计参与人次达到 20000+。DTCC 每年都将邀请百余位行业专家,就热点技术话题进行分享,为数据库人群、大数据从业人员、广大互联网人士及行业相关人士提供最具价值的交流平台。


2018 年 5 月 10-12 日,第九届中国数据库技术大会(DTCC2018)将如约而至。本届大会以 “数领先机 • 智赢未来” 为主题,设定 2 大主会场及 20 个技术专场,邀请来自国内外互联网、金融、教育等行业百余位技术专家,共同探讨 Oracle、MySQL、NoSQL、大数据、机器学习、区块链、数据可视化等领域的前瞻性热点话题与技术。



点击左下阅读原文,立享购票7.8折优惠

以上是关于Oracle 监听之动态和静态注册的主要内容,如果未能解决你的问题,请参考以下文章

广播机制之动态注册和静态注册

windows 2012 系统下oracle11.2 怎样配置监听

oracle 动态注册监听问题

动态监听与静态监听(转载)

oracle 动态注册和静态注册

01.Oracle存储结构深入分析与管理的课程内容介绍