在 Debian 上遇到 lsnrctl 权限不足(Permission denied),通常不是 Linux 文件权限本身,而是 Oracle 监听器的运行/管理权限模型 导致的。下面按常见场景给你解决方案。
oracle 用户运行lsnrctl 不能被 root 直接运行,否则会报权限不足或无法管理 listener。
su - oracle
lsnrctl status
注意:
su - oracle(带横线)会加载 Oracle 环境变量
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 start
# 报错 Permission denied
查看文件:
ls -l $ORACLE_HOME/network/admin/listener.ora
正确权限示例:
-rw-r--r-- oracle oinstall listener.ora
修复:
chown oracle:oinstall $ORACLE_HOME/network/admin/*.ora
chmod 644 $ORACLE_HOME/network/admin/*.ora
TNS-01190: The user is not authorized to execute the requested listener command
监听器是由 另一个用户(或 root)启动的
ps -ef | grep tnslsnr
kill -9 <pid>
su - oracle
lsnrctl start
如果你 必须用 root 管理 listener:
chown root:oinstall $ORACLE_HOME/bin/lsnrctl
chmod 755 $ORACLE_HOME/bin/lsnrctl
⚠️ 不推荐,存在安全隐患
如果是 systemd 启动:
systemctl status oracle-listener
确保 service 中:
User=oracle
✔ 是否 su - oracle
✔ ORACLE_HOME 是否正确
✔ listener 是否 oracle 启动
✔ .ora 文件权限是否正确
✔ 是否有多个 listener 冲突
如果你愿意,可以贴一下:
whoamips -ef | grep tns我可以直接帮你定位是哪一类权限问题。