lsnrctl 本身不会“自己崩”,它只是 Oracle Listener 的控制工具,真正可能出问题的是**监听进程(tnslsnr)**或运行环境。下面按常见原因给你一个排查清单(Debian 场景)。
ps -ef | grep tnslsnr
lsnrctl status
lsnrctl 命令打不开 → 客户端问题lsnrctl status 报 TNS-12541 / no listener → 监听进程没了tnslsnr 进程不在 → 监听崩溃/被杀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
路径:
$ORACLE_HOME/network/admin/listener.ora
常见问题:
测试:
lsnrctl start
看报错(TNS-xxxx)
netstat -tunlp | grep 1521
# 或
ss -tunlp | grep 1521
如果端口被占用:
Debian 小内存机器常见:
dmesg | grep -i oom
journalctl -xe | grep tnslsnr
如果看到:
Out of memory: Killed process (tnslsnr)
→ 加 swap 或限制 SGA
正确:
su - oracle
lsnrctl start
Debian 64 位常缺:
ldd $ORACLE_HOME/bin/tnslsnr
缺库会直接崩。
Debian 默认 AppArmor:
aa-status
su - oracle
lsnrctl stop
lsnrctl start
lsnrctl status
如果起不来,把报错完整贴出来(TNS-xxxxx)。
我可以精确判断,只要你说:
lsnrctl status 或 start 的完整输出我可以直接告诉你为什么崩、怎么修。