菜鸟科技网

oracle lsnrctl 命令

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

oracle lsnrctl 命令-图1
(图片来源网络,侵删)

lsnrctl 的核心作用

lsnrctl 就像是 Oracle 数据库的“前台接待员”,它的主要工作是:

  1. 监听端口:在指定的 TCP/IP 端口上等待客户端的连接请求。
  2. 服务请求:当客户端请求连接时,Listener 会检查请求的服务名(Service Name/SID)。
  3. 路由连接:如果服务可用,Listener 会告诉客户端如何连接到正确的数据库实例(通常是返回实例的地址和端口),然后断开与客户端的连接,后续的通信直接在客户端和数据库实例之间进行。
  4. 注册信息:数据库实例启动时会向 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,它会先拒绝新的连接请求,等待现有连接断开后再完全停止。

oracle lsnrctl 命令-图2
(图片来源网络,侵删)
$ 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: 这个状态非常重要! 如果这里是 BLOCKEDUNKNOWN,客户端就无法连接。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

关键信息解读:

oracle lsnrctl 命令-图3
(图片来源网络,侵删)
  • 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:无监听程序"

可能原因:

  1. Listener 未启动:最常见的原因。 解决: lsnrctl start
  2. Listener 启动失败listener.ora 配置文件有语法错误。 解决: lsnrctl start 查看错误日志,检查 listener.ora 文件中的 HOSTPORT 等配置。
  3. 客户端连接的地址/端口错误:客户端 tnsnames.ora 中配置的地址与 Listener 实际监听的地址不匹配。 解决: 在服务器端执行 lsnrctl status,确认 Listening Endpoints 中的 HOSTPORT,然后修改客户端配置。
  4. 防火墙阻止:服务器的防火墙规则阻止了客户端访问 Listener 的端口(如 1521)。 解决: 检查并配置防火墙,允许该端口的入站连接。

问题 2: Listener 状态显示服务为 BLOCKEDUNKNOWN

可能原因:

  1. 数据库实例未启动或未注册:数据库实例没有启动,或者启动后没有成功向 Listener 注册。 解决: 确保数据库实例是 OPEN 状态,如果实例启动后状态是 MOUNTNOMOUNT,服务不会注册,可以尝试在数据库实例启动后,在 Listener 端执行 lsnrctl reload 或重启 Listener。
  2. listener.ora 中配置了 STATIC 注册,但实例未启动:如果服务在 listener.ora 中被静态定义,但对应的数据库实例没有运行,状态可能会是 BLOCKED解决: 检查 listener.ora,移除不必要的静态配置,或者确保对应的数据库实例已经启动。

lsnrctltnsping 的区别

这是一个非常容易混淆的点,简单总结:

特性 lsnrctl tnsping
作用对象 Listener 进程本身 客户端的网络连接
主要功能 启动、停止、查看状态、管理 Listener 测试客户端是否能通过 TNS 协议连接到指定的服务
命令示例 lsnrctl status tnsping ORCLCDB
返回信息 Listener 是否运行、监听端口、已注册的服务列表 连接是否成功、往返时间、使用的协议地址

简单理解

  • lsnsrctl status 是问数据库的“前台接待员”:“你在吗?你在工作吗?你知道有哪些业务可以办理吗?”
  • tnsping 是客户端模拟一个电话,打给“前台接待员”,看电话能不能打通,线路通不通。

两者结合使用,是排查 Oracle 网络连接问题的黄金搭档。

分享:
扫描分享到社交APP
上一篇
下一篇