温馨提示×

debian lsnrctl为什么崩了

小樊
40
2026-09-21 21:01:07
栏目: 智能运维

lsnrctl 本身不会“自己崩”,它只是 Oracle Listener 的控制工具,真正可能出问题的是**监听进程(tnslsnr)**或运行环境。下面按常见原因给你一个排查清单(Debian 场景)。


一、先确认“崩”的是哪一层

ps -ef | grep tnslsnr
lsnrctl status
  • lsnrctl 命令打不开 → 客户端问题
  • lsnrctl status 报 TNS-12541 / no listener → 监听进程没了
  • tnslsnr 进程不在 → 监听崩溃/被杀

二、Debian 上 lsnrctl / 监听崩溃常见原因

1️⃣ Oracle 环境没加载(最常见)

Debian 不是 Oracle 官方首选系统,容易漏环境:

echo $ORACLE_HOME
echo $ORACLE_SID
which lsnrctl

✅ 正确应有:

ORACLE_HOME=/u01/app/oracle/product/19.3/dbhome_1

如果为空:

source ~/.bash_profile
# 或
. /u01/app/oracle/product/19.3/dbhome_1/bin/oraenv

2️⃣ listener.ora 配置错误

路径:

$ORACLE_HOME/network/admin/listener.ora

常见问题:

  • HOST 写错(应是 IP 或 hostname)
  • 端口被占用
  • 多实例 SID 写错

测试:

lsnrctl start

看报错(TNS-xxxx)


3️⃣ 端口被占用(Debian 常见)

netstat -tunlp | grep 1521
# 或
ss -tunlp | grep 1521

如果端口被占用:

  • 改 listener.ora 端口
  • 或杀掉占用进程

4️⃣ 内存 / OOM 杀掉监听

Debian 小内存机器常见:

dmesg | grep -i oom
journalctl -xe | grep tnslsnr

如果看到:

Out of memory: Killed process (tnslsnr)

→ 加 swap 或限制 SGA


5️⃣ 权限问题(Debian 特有问题)

  • 非 oracle 用户启动
  • /u01 权限不对

正确:

su - oracle
lsnrctl start

6️⃣ 缺失 32 位库(老 Oracle)

Debian 64 位常缺:

ldd $ORACLE_HOME/bin/tnslsnr

缺库会直接崩。


7️⃣ SELinux / AppArmor(少见但存在)

Debian 默认 AppArmor:

aa-status

三、快速自救步骤(推荐)

su - oracle
lsnrctl stop
lsnrctl start
lsnrctl status

如果起不来,把报错完整贴出来(TNS-xxxxx)。


四、你可以直接告诉我

我可以精确判断,只要你说:

  1. Oracle 版本(11g / 12c / 19c)
  2. Debian 版本
  3. lsnrctl status 或 start 的完整输出
  4. 是命令崩,还是监听进程没了

我可以直接告诉你为什么崩、怎么修。

0 踩