温馨提示×

linux lsnrctl如何排错

小樊
47
2026-10-16 18:08:51
栏目: 智能运维

lsnrctl 是 Oracle 数据库监听(Listener)的管理工具,常用于启动、停止、查看监听状态。下面按常见故障场景 + 排错步骤给你一个实用指南。


一、基础排错流程(最常用)

1️⃣ 查看监听状态

lsnrctl status

常见问题表现:

  • TNS-12541: TNS:no listener → 监听没启动
  • TNS-12560: TNS:protocol adapter error → 环境变量或 Oracle Home 有问题
  • 长时间无响应 → 端口被占用或网络异常

2️⃣ 启动监听

lsnrctl start

如果失败,看报错信息,常见原因:

  • listener.ora 配置错误
  • 端口被占用
  • 权限不足(非 oracle 用户)

3️⃣ 查看详细错误

lsnrctl status listener_name
lsnrctl services

services 可确认:

  • 监听是否注册了实例
  • 实例状态是 READY 还是 BLOCKED

二、常见错误及解决办法

❌ TNS-12541: No listener

原因:监听未启动或名字不对

✅ 解决:

lsnrctl start
lsnrctl start LISTENER

❌ TNS-12545 / TNS-12560

原因:

  • HOST 配置错误
  • Oracle Home 不对
  • 用户不是 oracle

✅ 解决:

echo $ORACLE_HOME
echo $ORACLE_SID
whoami

确保:

  • 使用 oracle 用户
  • .bash_profile 设置正确

❌ TNS-12542: Address already in use

原因:端口(默认 1521)被占用

✅ 解决:

netstat -tunlp | grep 1521

或修改 listener.ora:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = host)(PORT = 1522))
    )
  )

❌ 实例未注册(services 为空)

原因:

  • 数据库未启动
  • 未配置静态注册
  • LOCAL_LISTENER 没设置

✅ 解决:

sqlplus / as sysdba
ALTER SYSTEM REGISTER;

或配置静态监听(listener.ora):

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = /u01/app/oracle/product/19c/dbhome_1)
      (SID_NAME = orcl)
    )
  )

三、重要配置文件位置

$ORACLE_HOME/network/admin/listener.ora
$ORACLE_HOME/network/admin/tnsnames.ora
$ORACLE_HOME/network/log/listener.log

查看日志:

tail -f $ORACLE_HOME/network/log/listener.log

四、排错 checklist(推荐顺序)

  1. ✅ whoami → 必须是 oracle
  2. ✅ echo $ORACLE_HOME
  3. ✅ lsnrctl status
  4. ✅ 看 listener.log
  5. ✅ sqlplus 能否连
  6. ✅ 端口是否被占用
  7. ✅ 实例是否 REGISTER

如果你有具体报错信息(比如 TNS-xxxxx),可以直接贴出来,我可以帮你精准分析。

0 踩