暂无图片
暂无图片
6
暂无图片
暂无图片
暂无图片

如何在数据库中设置多个监听器

原创 哇哈哈 2022-12-02
1178

LOCAL_LISTENER 配置多个监听

通常能够情况下,您不必在数据库中配置与监听器相关的参数,无论是LOCAL_LISTENER还是REMOTE_LISTENER。每个实例的后台进程监听器注册(LREG)将自动向默认的本地和远程监听器注册服务。

对于使用非本地 IP 地址或非默认端口号的监听,您需要明确告诉 LREG 向多个监听器注册数据库服务。这就需要在LOCAL_LISTENER中设置更多的监听器地址。

在这种情况下,我们创建一个备份监听非默认端口 1522 以实现冗余。

1.创建新的监听器

编辑listener.ora

要添加一个监听不同端口的新监听器,我们需要修改listener.ora。

[oracle@test ~]$ vi $ORACLE_HOME/network/admin/listener.ora ... LISTENER2 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.111)(PORT = 1522)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522)) ) )

在RAC数据库中添加监听器可以参考:Srvctl如何给Grid的默认网络添加监听器。

lsnrctl start

我们通过lsnrctl start命令启动它。

[oracle@test ~]$ lsnrctl start listener2 LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 13-OCT-2022 04:36:46 Copyright (c) 1991, 2019, Oracle. All rights reserved. Starting /u01/app/oracle/product/19.3.0/dbhome_1/bin/tnslsnr: please wait... TNSLSNR for Linux: Version 19.0.0.0.0 - Production System parameter file is /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/listener.ora Log messages written to /u01/app/oracle/diag/tnslsnr/test/listener2/alert/log.xml Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.111)(PORT=1522))) Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1522))) Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.111)(PORT=1522))) STATUS of the LISTENER ------------------------ Alias listener2 Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production Start Date 13-OCT-2022 04:36:46 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/19.3.0/dbhome_1/network/admin/listener.ora Listener Log File /u01/app/oracle/diag/tnslsnr/test/listener2/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.111)(PORT=1522))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1522))) The listener supports no services The command completed successfully

在RAC数据库中启动监听器可以参考:Srvctl如何给Grid的默认网络添加监听器。

我们准备好了。

2.修改配置LOCAL_LISTENER

假设您已经创建了一个监听端口 1522 的新备份监听器。让我们看看如何在LOCAL_LISTENER中配置多个条目。

SQL> alter system set local_listener='(ADDRESS_LIST=(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.111)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.111)(PORT = 1522)))' scope=both; System altered.

ADDRESS_LIST 与 ADDRESS

关键是使用一个ADDRESS_LIST来接受参数中的多个ADDRESS。所以ADDRESS_LIST和每个ADDRESS之间的关系可以被认为是父子关系。
由于参数可以动态更改,我们不必重新启动实例。所以现在,我们可以确保参数配置正确。

SQL> show parameter local_listener NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ local_listener string (ADDRESS_LIST=(ADDRESS = (PROT OCOL = TCP)(HOST = 192.168.0.1 11)(PORT = 1521))(ADDRESS = (P ROTOCOL = TCP)(HOST = 192.168. 0.111)(PORT = 1522)))

alter system register

数据库服务将在 60 秒内注册到两个侦听器,或者您可以使其更快。

SQL> alter system register; System altered.

SQL 命令应该在每个实例中完成。

除了备份监听器,还有更多的场景可能会使用LOCAL_LISTENER中的多个条目。

Oracle RAC VIP 如何故障转移到另一个节点
如何解决 listener supports no services

具有相同端口的多个侦听器?

不可以,不能创建具有相同端口的相同 IP的监听,而其他 IP 已被占用。你甚至无法启动它。让我们看看错误。

[oracle@test ~]$ lsnrctl start listener2 ... TNS-01106: Listener using listener name LISTENER has already been started

只是不要为您的备份监听器监听相同的端口,选择另一个端口。按照惯例,端口 1522 是可以接受的。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论