lsnrctl 是一个命令行工具,用于控制 Oracle Net Listener 的启动、停止、状态查看以及配置管理,Listener 是一个独立的进程,负责监听客户端的连接请求,并将这些请求转发给相应的 Oracle 实例。

lsnrctl 的核心作用
lsnrctl 就像是 Oracle 数据库的“前台接待员”,它的主要工作是:
- 监听端口:在指定的 TCP/IP 端口上等待客户端的连接请求。
- 服务请求:当客户端请求连接时,Listener 会检查请求的服务名(Service Name/SID)。
- 路由连接:如果服务可用,Listener 会告诉客户端如何连接到正确的数据库实例(通常是返回实例的地址和端口),然后断开与客户端的连接,后续的通信直接在客户端和数据库实例之间进行。
- 注册信息:数据库实例启动时会向 Listener 注册自己的信息(服务名、实例名、状态等),这样 Listener 才知道有哪些服务可以提供。
基本语法和常用命令
lsnrctl 的基本语法是:
lsnrctl [command] [connect_identifier]
[command]:要执行的具体命令,如start,stop,status等。[connect_identifier]:可选,用于连接到远程或非默认的 Listener,格式通常是//hostname:port,//myserver:1521。
最常用的命令列表
| 命令 | 描述 | 示例 |
|---|---|---|
start |
启动 Listener。 | lsnrctl start |
stop |
优雅地停止 Listener。 | lsnrctl stop |
status |
查看 Listener 的状态,包括监听的端口、服务信息等。 | lsnrctl status |
services |
显示当前已注册到 Listener 的所有服务及其详细信息。 | lsnrctl services |
reload |
重新加载 listener.ora 配置文件,而不需要重启 Listener。 |
lsnrctl reload |
version |
显示 lsnrctl 和 Listener 的版本信息。 |
lsnrctl version |
help |
显示所有可用的命令及其简要说明。 | lsnrctl help |
exit / quit |
退出 lsnrctl 命令行环境。 |
lsnrctl> exit |
重要命令详解
lsnrctl start
启动 Listener,它会去读取默认位置的 listener.ora 配置文件,如果没有指定配置文件,它会使用一组默认设置。
$ lsnrctl start LSNRCTL for Linux: Version 19c - Production on 24-OCT-2025 10:30:00 Copyright (c) 1991, 2025, Oracle. All rights reserved. Starting /oracle/product/19c/dbhome_1/bin/tnslsnr: please wait... TNSLSNR for Linux: Version 19c - Production System parameter file is /oracle/product/19c/dbhome_1/network/admin/listener.ora Log messages written to /oracle/diag/tnslsnr/myhost/listener/alert/log.xml Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521))) ... Listener started successfully. The command completed successfully
lsnrctl stop
停止正在运行的 Listener,它会先拒绝新的连接请求,等待现有连接断开后再完全停止。

$ lsnrctl stop LSNRCTL for Linux: Version 19c - Production on 24-OCT-2025 10:31:00 Copyright (c) 1991, 2025, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))) The command completed successfully
lsnrctl status (最常用)
这是最重要的诊断命令,它提供 Listener 的全面健康状况报告。
$ lsnrctl status LSNRCTL for Linux: Version 19c - Production on 24-OCT-2025 10:32:00 Copyright (c) 1991, 2025, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 19c - Production Start Date 24-OCT-2025 10:30:00 Uptime 0 days 0 hr 2 min 0 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /oracle/product/19c/dbhome_1/network/admin/listener.ora Listener Log File /oracle/diag/tnslsnr/myhost/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521))) Services Summary... Service "ORCLCDB" has 1 instance(s). Instance "ORCLCDB", status READY, has 1 handler(s) for this service... Service "ORCLCDBXDB" has 1 instance(s). Instance "ORCLCDB", status READY, has 1 handler(s) for this service... Service "orclpdb1" has 1 instance(s). Instance "ORCLCDB", status READY, has 1 handler(s) for this service... The command completed successfully
关键信息解读:
- Alias: Listener 的别名,默认是
LISTENER。 - Uptime: 运行了多长时间。
- Listening Endpoints Summary: 监听的协议、主机和端口。如果这里没有显示任何端口,说明 Listener 没有成功启动或配置错误。
- Services Summary: 这是排查连接问题的关键部分!
Service "...": 服务名。Instance "...": 该服务对应的数据库实例名。status READY: 这个状态非常重要! 如果这里是BLOCKED或UNKNOWN,客户端就无法连接。READY表示服务已注册且可用。
lsnrctl services
这个命令比 status 中的服务部分更详细,专门用于查看已注册的服务信息。
$ lsnrctl services
LSNRCTL for Linux: Version 19c - Production on 24-OCT-2025 10:33:00
Copyright (c) 1991, 2025, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
Services Summary...
Service "ORCLCDB" has 1 instance(s).
Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0
LOCAL SERVICE ORCLCDB
0 0
Service "ORCLCDBXDB" has 1 instance(s).
Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Handler(s):
"D000" established:0 refused:0
LOCAL SERVICE ORCLCDBXDB
0 0
Service "orclpdb1" has 1 instance(s).
Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0
LOCAL SERVICE orclpdb1
0 0
The command completed successfully
关键信息解读:

Handler(s):DEDICATED: 表示该服务支持专用服务器连接(每个客户端一个服务器进程)。SHARED: 表示支持共享服务器连接(较少使用)。established: 当前已建立的连接数。refused: 被拒绝的连接数(通常是由于PROTOCOL设置或资源限制)。
进入交互式模式
你也可以不带任何参数直接运行 lsnrctl,进入交互式命令行环境,这在进行多项操作时非常方便。
$ lsnrctl LSNRCTL for Linux: Version 19c - Production on 24-OCT-2025 10:34:00 Copyright (c) 1991, 2025, Oracle. All rights reserved. Welcome to LSNRCTL, type "help" for information. LSNRCTL> status ... (status output) ... LSNRCTL> services ... (services output) ... LSNRCTL> exit
常见问题排查
问题 1: 客户端连接时报错 "ORA-12541: TNS:无监听程序"
可能原因:
- Listener 未启动:最常见的原因。
解决:
lsnrctl start - Listener 启动失败:
listener.ora配置文件有语法错误。 解决:lsnrctl start查看错误日志,检查listener.ora文件中的HOST、PORT等配置。 - 客户端连接的地址/端口错误:客户端
tnsnames.ora中配置的地址与 Listener 实际监听的地址不匹配。 解决: 在服务器端执行lsnrctl status,确认Listening Endpoints中的HOST和PORT,然后修改客户端配置。 - 防火墙阻止:服务器的防火墙规则阻止了客户端访问 Listener 的端口(如 1521)。 解决: 检查并配置防火墙,允许该端口的入站连接。
问题 2: Listener 状态显示服务为 BLOCKED 或 UNKNOWN
可能原因:
- 数据库实例未启动或未注册:数据库实例没有启动,或者启动后没有成功向 Listener 注册。
解决: 确保数据库实例是
OPEN状态,如果实例启动后状态是MOUNT或NOMOUNT,服务不会注册,可以尝试在数据库实例启动后,在 Listener 端执行lsnrctl reload或重启 Listener。 listener.ora中配置了STATIC注册,但实例未启动:如果服务在listener.ora中被静态定义,但对应的数据库实例没有运行,状态可能会是BLOCKED。 解决: 检查listener.ora,移除不必要的静态配置,或者确保对应的数据库实例已经启动。
lsnrctl 与 tnsping 的区别
这是一个非常容易混淆的点,简单总结:
| 特性 | lsnrctl |
tnsping |
|---|---|---|
| 作用对象 | Listener 进程本身 | 客户端的网络连接 |
| 主要功能 | 启动、停止、查看状态、管理 Listener | 测试客户端是否能通过 TNS 协议连接到指定的服务 |
| 命令示例 | lsnrctl status |
tnsping ORCLCDB |
| 返回信息 | Listener 是否运行、监听端口、已注册的服务列表 | 连接是否成功、往返时间、使用的协议地址 |
简单理解:
lsnsrctl status是问数据库的“前台接待员”:“你在吗?你在工作吗?你知道有哪些业务可以办理吗?”tnsping是客户端模拟一个电话,打给“前台接待员”,看电话能不能打通,线路通不通。
两者结合使用,是排查 Oracle 网络连接问题的黄金搭档。
