在 Debian 上执行 lsnrctl 出现权限不足,通常不是 Linux 权限问题,而是 Oracle 环境/用户/配置 的问题。下面按最常见原因 → 解决方法给你排查。
lsnrctl 必须用 Oracle 软件安装用户运行(通常是 oracle)。
su - oracle
lsnrctl status
注意:
- 一定要加
-,否则环境变量不会加载- 不要用
root直接执行
即使切换成 oracle 用户,如果环境变量没配置,也会报错或提示权限不足。
echo $ORACLE_HOME
echo $ORACLE_SID
which lsnrctl
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=orcl
路径要根据你的实际安装目录调整
ls -l $ORACLE_HOME/bin/lsnrctl
正常应类似:
-rwxr-x--x 1 oracle oinstall
chown -R oracle:oinstall $ORACLE_HOME
chmod -R 755 $ORACLE_HOME/bin
⚠️ 不建议直接用 root 修复权限,最好确认安装方式
监听配置目录:
$ORACLE_HOME/network/admin
检查:
ls -ld $ORACLE_HOME/network/admin
ls -l $ORACLE_HOME/network/admin/listener.ora
chown oracle:oinstall $ORACLE_HOME/network/admin/*
有时监听是 root 启动的,oracle 用户无法管理。
ps -ef | grep tnslsnr
如果是 root 启动的:
kill -9 <pid>
su - oracle
lsnrctl start
Debian 默认没有 SELinux,但如果你启用了 AppArmor:
aa-status
可临时测试:
systemctl stop apparmor
| 错误信息 | 原因 |
|---|---|
| Permission denied | 非 oracle 用户 |
| lsnrctl: command not found | ORACLE_HOME 没设置 |
| TNS-12555 | 监听目录权限问题 |
| TNS-12546 | 无法访问监听 socket |
whoami
echo $ORACLE_HOME
which lsnrctl
lsnrctl status
你可以直接贴出:
ls -l $ORACLE_HOME/bin/lsnrctl 输出我可以一步一步帮你修 ✅