lsnrctl 是 Oracle 数据库监听(Listener) 的管理工具,不是 Debian 自带的。
在 Debian(或任何 Linux)上出现 lsnrctl 连接失败,通常不是 Debian 本身的问题,而是 Oracle 环境或监听未正常启动。下面按常见原因给你排查思路。
lsnrctl 依赖以下环境变量:
ORACLE_HOME
ORACLE_SID
PATH
检查:
echo $ORACLE_HOME
echo $ORACLE_SID
which lsnrctl
正常应类似:
ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
ORACLE_SID=orcl
临时设置(示例):
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
⚠️ 如果是 oracle 用户,建议写在
.bash_profile里
执行:
lsnrctl status
TNS-12541: TNS:no listener
说明 监听没启动
✅ 解决:
lsnrctl start
再检查:
lsnrctl status
配置文件位置:
$ORACLE_HOME/network/admin/listener.ora
最小可用示例:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
)
修改后重启监听:
lsnrctl reload
# 或
lsnrctl stop
lsnrctl start
Oracle 对主机名非常敏感。
检查主机名:
hostname
检查 /etc/hosts:
cat /etc/hosts
✅ 必须有类似:
127.0.0.1 localhost
127.0.1.1 debian
或:
192.168.1.100 debian
⚠️ 如果 listener.ora 里用的是主机名,但 hosts 里没有,就会连接失败。
ss -lntp | grep 1521
如果被其他程序占用:
确保你是 oracle 用户 执行:
su - oracle
而不是 root 直接执行 lsnrctl,否则可能:
如果你是在 sqlplus 里失败:
ORA-12514
ORA-12170
那可能是:
tnsnames.ora 配置错误检查:
lsnrctl services
su - oracle
export ORACLE_HOME=...
export ORACLE_SID=...
lsnrctl status
看报错 → 对照下表:
| 错误 | 原因 |
|---|---|
| TNS-12541 | 监听未启动 |
| TNS-12560 | 协议适配器错误 |
| TNS-12545 | 主机名解析失败 |
| ORA-12514 | 实例未注册 |
你可以直接贴出:
lsnrctl status 完整输出listener.ora 内容我可以 精确告诉你哪一行配置错了 ✅