暂无图片
暂无图片
12
暂无图片
暂无图片
暂无图片

Oracle 监听:动态&静态注册

原创 布衣 2026-03-02
497

监听简介

建立在通用的 TCP 和 IPC 之上的网络协议
1)服务器端的 listener (监听器)负责注册的 Oracle 的服务
2)远程客户端通过 Oracle Net 访问 Oracle 服务器端的服务
3)以 TCP 协议为基础的 OracleNet 必须描述三个基本要素:
①协议是 TCP、②服务器的 IP 地址或主机名、③端口号

1) Oracle Net 配置文件的路径
$ORACLE_HOME/network/admin/
2) 三个 Oracle Net 配置文件
①listener.ora 在服务器端的配置文件
②tnsnames.ora 在客户端的配置文件
③sqlnet.ora 客户端或服务器端 描述参数的配置文件

  • 概述示例图
    image.png

动态注册

  • 1.实例启动后,LREG 进程每分钟自动将服务名(service_name)注册到监听器中也可以通过 alter system register 命令实现立刻注册。(11g pmon 进程)
  • 2.系统有一个默认的监听器叫做 LISTENER,端口号是 1521,不需要 listener.ora 配置文件
    image.png
  • 3.动态注册要求实例至少启动到 mounted 状态,listener 监听器才能注册成功
  • 4.动态注册需要配置 local_listener 参数
    local_listener 是 Oracle 的初始化参数(动态参数,可在线修改),核心作用是:告诉数据库实例「要向哪个监听注册自己的服务信息」(即实例的「监听指向」)。
    默认值:空(实例默认向「本地默认监听(1521 端口)」注册);
    核心场景:非默认监听(如端口 1522、多监听实例、RAC)时,必须配置该参数,否则实例无法向监听注册服务。
# 查看参数 SQL> show parameter local_listener ; NAME TYPE VALUE ------------------------------------ -------------------- ---------------- local_listener string # 配置参数 SQL> ALTER SYSTEM SET local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=db-server)(PORT=实际端口))' SCOPE=BOTH; # 重新注册 SQL> ALTER SYSTEM REGISTER;

V$LISTENER_NETWORK 是 Oracle 的动态性能视图,核心作用是:展示当前数据库实例「感知到的所有监听」的网络配置信息(包括协议、端口、监听名等),是监听配置的「实时快照」。
数据来源:实例从监听进程(tnslsnr)获取的监听网络信息,以及local_listener参数配置的监听信息;

SQL> col NETWORK for a20 SQL> col TYPE for a20 SQL> col VALUE for a100 SQL> select * from V$LISTENER_NETWORK; NETWORK TYPE VALUE -------------------- -------------------- ---------------------------------------------------------------------------------------------------- LOCAL LISTENER (ADDRESS=(PROTOCOL=TCP)(HOST=db_oracle_100.db.com)(PORT=1521)) SERVICE NAME oldcardtest SERVICE NAME oldcardtest
  • 5.READY 是动态注册的成功的标识
    image.png

静态注册

1)静态注册要点
①静态注册必须在 listener.ora 中描述实例信息
②实例不必启动,静态监听器也能注册
③服务器启动静态监听后,可以通过远程启动数据库
2)静态注册的描述分为两部分内容
①网络三要素:①Protocal ②Host ③Port
②服务名描述:GLOBAL_DBNAME:全局数据库名(静态注册特征 UNKNOWN)
listener.ora 配置:
配置 1521 端口的静态监听程序 LISTENER 实现 PROD 和 cdb1 的静态注册

# 静默创建监控 [oracle@db_oracle_100 ~]$ netca -silent -responsefile /home/oracle/database/response/netca.rsp 正在对命令行参数进行语法分析: 参数"silent" = true 参数"responsefile" = /home/oracle/database/response/netca.rsp 完成对命令行参数进行语法分析。 Oracle Net Services 配置: 完成概要文件配置。 Oracle Net 监听程序启动: 正在运行监听程序控制: /u01/oracle/11.2.0.4/product/bin/lsnrctl start LISTENER 监听程序控制完成。 监听程序已成功启动。 监听程序配置完成。 成功完成 Oracle Net Services 配置。退出代码是0 [oracle@db_oracle_100 ~]$ lsnrctl status LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 01-MAR-2026 12:53:18 Copyright (c) 1991, 2013, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production Start Date 01-MAR-2026 12:53:10 Uptime 0 days 0 hr. 0 min. 8 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/oracle/11.2.0.4/product/network/admin/listener.ora Listener Log File /u01/oracle/diag/tnslsnr/db_oracle_100/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=db_oracle_100.db.com)(PORT=1521))) The listener supports no services The command completed successfully
SQL> show parameter name; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ cell_offloadgroup_name string db_file_name_convert string db_name string oldcardt db_unique_name string oldcardtest global_names boolean FALSE instance_name string oldcardtest lock_name_space string log_file_name_convert string processor_group_name string service_names string oldcardtest [oracle@db_oracle_100~]$ cat /u01/oracle/11.2.0.4/product/network/admin/listener.ora LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = db_oracle_100.db.com)(PORT = 1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC= (GLOBAL_DBNAME=oldcard) (SID_NAME=oldcardtest) (ORACLE_HOME=/u01/oracle/11.2.0.4/product) ) ) ADR_BASE_LISTENER = /u01/oracle
  • 查看监听
    image.png

  • 关库
    image.png

  • 查看监听
    image.png

  • 远程登录启库
    image.png

新增 1522 端口监听

  • 核心流程:
    配置 listener.ora(新增 1522 监听)→ 启动 LISTENER1522 → 配置 local_listener 指向 1522 → 强制注册 → 验证连通性;
  • 检查端口是否被占用
[root@db_oracle_100~]# netstat -tulpn | grep 1522 [root@db_oracle_100~]#
  • 配置 listener.ora 文件 增加1522 配置
[root@db_oracle_100admin]# cp listener.ora listener.ora.bak
  • vim listener.ora
# 保留原1521配置 LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = db_oracle_100.db.com)(PORT = 1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC= (GLOBAL_DBNAME=oldcard) (SID_NAME=oldcardtest) (ORACLE_HOME=/u01/oracle/11.2.0.4/product) ) ) ADR_BASE_LISTENER = /u01/oracle # 新增1522配置 LISTENER1522 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522)) (ADDRESS = (PROTOCOL = TCP)(HOST = db_oracle_100.db.com)(PORT = 1522)) ) ) # 静态注测监听 SID_LIST_LISTENER1522 = (SID_LIST = (SID_DESC= (GLOBAL_DBNAME=oldcard1522) (SID_NAME=oldcardtest) (ORACLE_HOME=/u01/oracle/11.2.0.4/product) ) )
  • 增加tns 1522连接字符串
    vi $ORACLE_HOME/network/admin/tnsnames.ora
oldcard_1522= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.5.141)(PORT = 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = oldcard1522) ) )
  • 启动监控:LISTENER1522
[oracle@db_oracle_100 ~]$ lsnrctl start LISTENER1522 -- 查看监听 [oracle@db_oracle_100 ~]$ lsnrctl status LISTENER1522
  • 登录
[oracle@db_oracle_100 ~]$ sqlplus sys/oracle@oldcard_1522 as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Sun Mar 1 13:26:43 2026 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL>
  • 测试连接
[oracle@db_oracle_100 ~]$ tnsping oldcard_1522 TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 01-MAR-2026 13:27:08 Copyright (c) 1997, 2013, Oracle. All rights reserved. Used parameter files: /u01/oracle/11.2.0.4/product/network/admin/sqlnet.ora Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.5.141)(PORT = 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = oldcard1522))) OK (0 msec)

动态注册:1522监听

启动 1522 监听后,实例默认不会自动注册到该监听,需配置local_listener参数让实例向 1522 监听注册服务。

-- 查看当前local_listener配置(默认指向1521) SHOW PARAMETER local_listener; -- 配置实例向1522监听注册(两种方式,选其一) -- 方式1:直接指定1522端口连接串(推荐,无需依赖tnsnames) ALTER SYSTEM SET local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.5.141)(PORT=1522))' SCOPE=BOTH; -- 方式2:使用tnsnames中的连接串名(需先配置tnsnames.ora) -- ALTER SYSTEM SET local_listener = 'POSP1522' SCOPE=BOTH; -- 强制实例立即向1522监听注册服务(关键,无需等待自动注册) -- 修改local_listener后必须执行ALTER SYSTEM REGISTER,否则实例不会立即注册; ALTER SYSTEM REGISTER;
  • 查看
[oracle@db_oracle_100 ~]$ lsnrctl status LISTENER1522 LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 01-MAR-2026 13:36:08 Copyright (c) 1991, 2013, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1522))) STATUS of the LISTENER ------------------------ Alias LISTENER1522 Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production Start Date 01-MAR-2026 13:35:05 Uptime 0 days 0 hr. 1 min. 2 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/oracle/11.2.0.4/product/network/admin/listener.ora Listener Log File /u01/oracle/diag/tnslsnr/db_oracle_100/listener1522/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1522))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=bjdx099sin141.hnapay.com)(PORT=1522))) Services Summary... Service "oldcardtest" has 1 instance(s). Instance "oldcardtest", status READY, has 1 handler(s) for this service... Service "oldcardtestXDB" has 1 instance(s). Instance "oldcardtest", status READY, has 1 handler(s) for this service... The command completed successfully

– 修改tns

oldcard_1522=
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.5.141)(PORT = 1522))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME =oldcardtest)
    )
  )

– 测试登录

[oracle@db_oracle_100 ~]$ sqlplus sys/oracle@oldcard_1522 as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Sun Mar 1 13:37:17 2026 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL>

欢迎赞赏支持或留言指正
image.png

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

评论