lsnrctl 是 Oracle 数据库监听(Listener) 的管理工具,常见于 Linux 环境。如果你在 Linux 上执行 lsnrctl 报错,原因通常可以归为以下几类。下面我按常见原因 + 排查方法给你说明,你可以对照自己的报错信息。
lsnrctl 依赖环境变量。
报错示例
command not found
bash: lsnrctl: command not found
或
TNS-12547: TNS:lost contact
解决
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=orcl
⚠️ 必须用 oracle 用户,不要用 root
报错示例
Permission denied
解决
su - oracle
报错示例
TNS-01106: Listener using listener name LISTENER has already been started
TNS-01189: The listener could not be created
排查
vi $ORACLE_HOME/network/admin/listener.ora
常见错误:
报错示例
TNS-12542: TNS:address already in use
排查
netstat -tunlp | grep 1521
# 或
ss -tunlp | grep 1521
报错示例
lsnrctl: error while loading shared libraries
解决
$ORACLE_HOME/bin/lsnrctl 是否存在ldd $ORACLE_HOME/bin/lsnrctl
报错示例
TNS-12541: TNS:no listener
解决
lsnrctl start
lsnrctl status
whoami
echo $ORACLE_HOME
echo $PATH
lsnrctl status
你可以直接把 完整报错信息 贴出来,例如:
[oracle@db ~]$ lsnrctl status
LSNRCTL for Linux: Version 19.3.0.0.0
TNS-12541: TNS:no listener
我可以根据报错码(如 TNS-12541)直接告诉你原因和修法。
你现在的报错是哪一种?