Oracle 19c 监听器完全指南

📅 2026/7/1 9:16:14
Oracle 19c 监听器完全指南
Oracle 19c 监听器完全指南1 监听器简介ORACLE的监听器Listener是数据库与客户端之间的桥梁负责接收并处理客户端的初始连接请求。一旦连接建立成功监听器便将连接转交给对应的数据库进程后续通信不再依赖监听器。换言之监听器仅在连接建立的瞬间发挥作用即使之后监听器进程停止已建立的连接也不会受影响。监听器的注册模式分为动态注册和静态注册两种理解二者的区别是掌握监听器的核心。1.1 动态注册 (Dynamic Service Registration)动态注册是指数据库实例在启动时通过内部进程自动将服务信息注册到监听器。在Oracle 12c之前的版本中这一任务由PMON进程完成从Oracle 12c开始这一职责移交给了LREGListener Registration进程。动态注册的核心机制如下数据库启动时LREG进程会根据初始化参数文件init.ora或SPFILE中的INSTANCE_NAME和SERVICE_NAMES参数将实例和服务信息自动注册到监听器。若SERVICE_NAMES未显式设置数据库将使用DB_NAME和DB_DOMAIN拼接生成默认服务名。LREG进程默认每60秒执行一次发现例程discovery routine。如果监听器在数据库启动之后才启动动态注册最多需要等待60秒才能完成。重要建议在listener.ora中显式设置SERVICE_NAMES和INSTANCE_NAME是最佳实践。否则若监听器在数据库运行后重启动态注册信息可能丢失。如需立即注册可执行以下命令强制LREG进程立即注册SQL ALTER SYSTEM REGISTER;查看动态注册状态通过lsnrctl status命令查看服务状态显示为READY即表示该服务为动态注册。1.2 静态注册 (Static Service Registration)静态注册是指监听器启动时根据listener.ora文件中预定义的配置信息注册服务与数据库实例当前是否处于运行状态无关。为何在已有动态注册的情况下还需静态注册主要原因包括需要在数据库实例未启动时也能响应连接请求如远程启动数据库监听器重启后无需等待60秒即可提供服务某些管理工具或特定场景需要稳定的服务名注册静态注册配置示例listener.oraSID_LIST_LISTENER (SID_LIST (SID_DESC (SID_NAME PLSExtProc) (ORACLE_HOME /u01/app/oracle/product/19.0.0/dbhome_1) (PROGRAM extproc) ) (SID_DESC (GLOBAL_DBNAME orcl) (ORACLE_HOME /u01/app/oracle/product/19.0.0/dbhome_1) (SID_NAME orcl) ) )查看静态注册状态通过lsnrctl status命令查看服务状态显示为UNKNOWN即表示该服务为静态注册。1.3 动态注册 vs 静态注册 对比对比维度动态注册静态注册注册时机数据库启动后由LREG进程自动注册监听器启动时读取listener.ora注册依赖条件数据库实例必须处于运行状态无需数据库实例运行注册延迟最多60秒可手动ALTER SYSTEM REGISTER立即触发无延迟监听器启动即注册服务状态显示READYUNKNOWN适用场景常规连接、负载均衡、RAC环境远程启动数据库、监听器重启后的快速恢复2 Oracle 19c 监听器核心新特性Oracle 19c在监听器管理方面引入了多项重要改进显著提升了运维便捷性。2.1 日志自动轮转Log File Segmentation【核心新特性】在19c之前的版本中监听器的TXT格式日志文件不会自动轮转长期运行可能导致日志文件无限增长给运维带来沉重负担。Oracle 19c引入了两个新参数来控制日志文件的分段与数量参数说明默认值LOG_FILE_SIZE_listener_name指定每个日志文件段的大小单位MB300 MBLOG_FILE_NUM_listener_name指定日志文件段的最大数量无默认值不设则无限增长配置示例listener.oraLOG_FILE_SIZE_LISTENER 10 LOG_FILE_NUM_LISTENER 8以上配置表示每个日志文件最大10MB最多保留8个历史文件超出时自动删除最旧的日志段。注意修改这些参数后需要重启监听器才能生效。验证效果$ lsnrctl status LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 19-FEB-2021 15:20:51 STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production Start Date 19-FEB-2021 15:20:51 Uptime 0 days 0 hr. 0 min. 0 sec Listener Log File /u01/app/oracle/diag/tnslsnr/p19c/listener/alert/log.xml ... The command completed successfully配置生效后TXT和XML格式的监听器日志均支持自动轮转。XML日志文件达到设定大小限制后两种格式的日志会同时轮转。$ du -sh /u01/app/oracle/diag/tnslsnr/p19c/listener/trace/* 2.0M listener_1.log 488K listener_2.log 192K listener.log2.2 多租户架构下的GUID服务注册【核心新特性】Oracle 19c作为多租户架构Multitenant的成熟版本监听器中会自动为CDB和每个PDB注册一个以GUID全局唯一标识符命名的服务。这是Oracle 19c及更高版本的固有行为用于支持Data Guard、GoldenGate、远程PDB复制等内部管理功能。$ lsnrctl status Services Summary... Service 86b637b62fdf7a65e053f706e80a27ca has 1 instance(s). # CDB$ROOT的GUID Instance orcl, status READY, has 1 handler(s) for this service... Service 2b6f176f0f10db3be0637885a8c06e04 has 1 instance(s). # PDB的GUID Instance orcl, status READY, has 1 handler(s) for this service... Service orcl has 1 instance(s). Instance orcl, status READY, has 1 handler(s) for this service... Service orclXDB has 1 instance(s). Instance orcl, status READY, has 1 handler(s) for this service... Service orclpdb has 1 instance(s). Instance orcl, status READY, has 1 handler(s) for this service...这些GUID服务名与常规服务名共存互不冲突。普通用户连接仍使用用户友好的服务名如orcl、orclpdb而Oracle内部组件则使用GUID服务名以确保唯一性。2.3 连接速率限制Rate Limit【安全增强】Oracle 19c支持在监听器层面配置连接速率限制用于防止拒绝服务DoS攻击或控制因应用服务器重启等导致的登录风暴logon storm。通过在listener.ora中配置相关参数可以限制单位时间内来自同一客户端的连接请求数量从而增强数据库的安全性。2.4 监听器管理认证【安全增强】Oracle 19c强制要求监听器管理操作需要通过本地操作系统认证。这意味着只有启动监听器的操作系统用户才能对其进行管理如停止、重载等。这一机制有效防止了未经授权的监听器管理操作避免了潜在的拒绝服务攻击、审计数据丢失或非授权重配置等安全风险。2.5 扩展的Easy Connect语法Oracle 19c对Easy Connect连接语法进行了扩展简化了常见连接场景的配置减少了对tnsnames.ora文件的依赖。新版Easy Connect语法支持更多选项例如可直接在连接字符串中指定连接超时、负载均衡策略等参数部署和配置更加便捷。3 监听器操作命令以下为Oracle 19c环境下监听器管理的常用命令及输出示例。3.1 查看监听器版本$ lsnrctl version LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 15-JUL-2019 03:01:00 Copyright (c) 1991, 2019, Oracle. All rights reserved.3.2 查看监听器状态$ lsnrctl status LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 15-JUL-2019 01:09:40 Copyright (c) 1991, 2019, Oracle. All rights reserved. Connecting to (DESCRIPTION(ADDRESS(PROTOCOLTCP)(HOSThost01.example.com)(PORT1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production Start Date 10-JUL-2019 01:32:04 Uptime 4 days 23 hr. 37 min. 36 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora Listener Log File /u01/app/oracle/diag/tnslsnr/host01/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION(ADDRESS(PROTOCOLtcp)(HOSThost01.example.com)(PORT1521))) (DESCRIPTION(ADDRESS(PROTOCOLipc)(KEYEXTPROC1521))) Services Summary... Service orcl has 1 instance(s). Instance orcl, status READY, has 1 handler(s) for this service... Service orclXDB has 1 instance(s). Instance orcl, status READY, has 1 handler(s) for this service... The command completed successfully3.3 查看服务详情$ lsnrctl services LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 15-JUL-2019 01:09:40 Services Summary... Service orcl has 1 instance(s). Instance orcl, status READY, has 1 handler(s) for this service... Handler(s): DEDICATED established:1 refused:0 state:ready LOCAL SERVER Service orclXDB has 1 instance(s). Instance orcl, status READY, has 1 handler(s) for this service... Handler(s): D000 established:0 refused:0 current:0 max:1022 state:ready DISPATCHER machine: host01, pid: 11136 (ADDRESS(PROTOCOLtcp)(HOSThost01)(PORT49712))3.4 启动与停止监听器# 启动默认监听器LISTENER $ lsnrctl start # 启动指定名称的监听器 $ lsnrctl start LISTENER2 # 停止监听器 $ lsnrctl stop # 重新加载配置无需停止监听器 $ lsnrctl reloadreload命令会重新读取listener.ora文件同时动态注册的服务会被取消注册并重新注册不会中断现有连接。3.5 监听器管理完整命令列表$ lsnrctl help The following operations are available An asterisk (*) denotes a modifier or extended command: start stop status services servacls version reload save_config trace spawn quit exit set* show*常用命令说明命令功能start启动监听器stop停止监听器status查看监听器状态摘要services查看详细的服务注册信息reload重新加载listener.ora配置无需重启save_config将当前运行时配置保存到listener.oraservacls查看服务的ACL信息19c支持version显示监听器版本4 多IP与多监听器配置实践4.1 单个监听器绑定多个IP和端口LISTENER (DESCRIPTION_LIST (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 192.168.20.3)(PORT 1521)) (ADDRESS (PROTOCOL TCP)(HOST 192.168.20.5)(PORT 1523)) (ADDRESS (PROTOCOL IPC)(KEY EXTPROC1521)) ) )修改后需重启监听器使配置生效$ lsnrctl stop $ lsnrctl start客户端TNS配置连接至端口1523TEST3 (DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST 192.168.20.5)(PORT 1523)) ) (CONNECT_DATA (SERVICE_NAME orcl) ) )4.2 创建新的监听器监控其他数据库LISTENER_NEW (DESCRIPTION_LIST (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 192.168.20.6)(PORT 1524)) (ADDRESS (PROTOCOL IPC)(KEY EXTPROC1521)) ) ) SID_LIST_LISTENER_NEW (SID_LIST (SID_DESC (SID_NAME PLSExtProc) (ORACLE_HOME /u01/app/oracle/product/19.0.0/dbhome_1) (PROGRAM extproc) ) (SID_DESC (GLOBAL_DBNAME testdb) (ORACLE_HOME /u01/app/oracle/product/19.0.0/dbhome_1) (SID_NAME testdb) ) )启动新监听器$ lsnrctl start LISTENER_NEW4.3 动态注册到非默认监听器动态注册默认只注册到默认的监听器名称为LISTENER、端口为1521、协议为TCP。如果需要向非默认监听器注册则需要配置LOCAL_LISTENER参数SQL ALTER SYSTEM SET LOCAL_LISTENER(ADDRESS(PROTOCOLTCP)(HOST192.168.20.6)(PORT1524)); SQL ALTER SYSTEM REGISTER;LOCAL_LISTENER和REMOTE_LISTENER参数控制数据库实例向监听器“自报家门”的地址设错会导致LREG注册失败。5 通过监听器远程管理数据库Oracle 19c支持通过监听器远程启动和关闭数据库但需满足以下条件必须配置静态注册动态注册无法用于远程关闭数据库连接用户需具备SYSDBA或SYSOPER权限静态注册配置listener.oraSID_LIST_LISTENER (SID_LIST (SID_DESC (GLOBAL_DBNAME orcl) (ORACLE_HOME /u01/app/oracle/product/19.0.0/dbhome_1) (SID_NAME orcl) ) )远程关闭数据库示例$ sqlplus sys/passwordorcl_remote as sysdba SQL SHUTDOWN IMMEDIATE;远程启动数据库$ sqlplus sys/passwordorcl_remote as sysdba SQL STARTUP;重要提示远程管理功能依赖于监听器的静态注册。若仅配置动态注册数据库未启动时监听器无法获知服务信息将无法建立连接。6 总结Oracle 19c在监听器管理方面的核心演进可归纳为日志管理革新通过LOG_FILE_SIZE_*和LOG_FILE_NUM_*参数实现日志自动轮转彻底解决了监听器日志无限增长的历史难题。多租户深度集成GUID服务名自动注册成为19c多租户架构的标志性特征为CDB/PDB级别的精细化管理提供底层支撑。安全能力增强支持连接速率限制和监听器管理认证有效防范DoS攻击和未授权管理操作。易用性提升扩展的Easy Connect语法和servacls等新命令降低了连接配置与管理复杂度。架构稳定性LREG进程取代PMON负责动态注册默认60秒轮询周期配合ALTER SYSTEM REGISTER即时触发机制确保了服务注册的可靠性与灵活性。无论是从传统版本迁移到19c还是新建19c环境掌握以上监听器特性都是确保数据库高可用与运维效率的关键。