lsnrctl 是 Oracle 监听(Listener)的管理工具,在 Linux 上执行 lsnrctl status / start / stop 等命令超时,通常不是网络本身慢,而是监听无法响应或环境异常。下面按最常见原因逐一说明。
lsnrctl status
# 等待很久后超时
检查:
ps -ef | grep tnslsnr
✅ 如果没有 tnslsnr 进程,说明监听没起
✅ 如果进程在,但无响应,可能是监听死锁
解决:
lsnrctl stop
lsnrctl start
典型问题:
LISTENER =
(ADDRESS = (PROTOCOL=TCP)(HOST=wrong_host)(PORT=1521))
或:
/etc/hosts 中检查:
hostname
cat /etc/hosts
✅ 建议:
HOST = 127.0.0.1
或
HOST = 实际IP
如果 HOST 是主机名,而 DNS 很慢:
lsnrctl status
# 卡在 Connecting to (DESCRIPTION=...)
测试:
getent hosts 主机名
ping 主机名
✅ 解决:
/etc/hosts 加:127.0.0.1 hostname
echo $ORACLE_HOME
echo $ORACLE_SID
如果空或错误:
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
否则 lsnrctl 可能:
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))
如果 IPC 异常,也会卡住。
✅ 可临时注释 IPC 只留 TCP 测试。
netstat -tunlp | grep 1521
或:
telnet localhost 1521
如果有防火墙:
systemctl stop firewalld
$ORACLE_HOME/network/log/listener.log
常见报错:
ps -ef | grep tnslsnr
netstat -tunlp | grep 1521
echo $ORACLE_HOME
cat $ORACLE_HOME/network/admin/listener.ora
getent hosts 主机名
lsnrctl 超时,90% 是 HOST 解析问题、监听未启动、或 listener.ora 配置错误。
如果你愿意,可以把下面内容贴出来,我可以直接帮你定位:
listener.oralsnrctl status 完整输出我可以进一步精确判断。