Ubuntu系统使用lsnrctl的常见问题及解决方法
原因:lsnrctl未安装,或安装路径未添加到系统环境变量PATH中。
解决方法:
which lsnrctl命令查看路径(若返回空则未安装);~/.bashrc文件,添加export PATH=$PATH:/path/to/lsnrctl(将/path/to/lsnrctl替换为实际路径,如/u01/app/oracle/product/19.0.0/dbhome_1/bin);source ~/.bashrc;/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl。原因:当前用户无执行lsnrctl的权限。
解决方法:
sudo lsnrctl <command>(如sudo lsnrctl start);dba组:sudo usermod -aG dba $USER,然后重新登录。原因:lsnrctl是Oracle工具,未安装Oracle数据库软件或未配置监听器。
解决方法:
listener.ora文件(位于$ORACLE_HOME/network/admin)存在且配置正确,例如:LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))))
lsnrctl init创建默认配置(若未配置)。原因:Oracle默认监听端口(1521)已被其他应用占用。
解决方法:
sudo netstat -tulnp | grep 1521或sudo lsof -i :1521;sudo kill -9 <PID>(替换为实际进程ID);listener.ora文件,修改PORT值为未使用的端口(如1522),保存后重启监听器:lsnrctl stop && lsnrctl start。原因:ORACLE_HOME(Oracle安装目录)、ORACLE_SID(数据库实例名)等环境变量未设置或错误。
解决方法:
~/.bashrc文件,添加以下内容(替换为实际路径和SID):export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin
source ~/.bashrc;echo $ORACLE_HOME(应返回安装路径)、echo $ORACLE_SID(应返回实例名)。原因:listener.ora或tnsnames.ora文件中存在语法错误(如括号不匹配、参数格式错误)。
解决方法:
vi)打开文件,确认所有括号、引号匹配,参数格式正确;lsnrctl check命令检查配置文件语法;lsnrctl stop && lsnrctl start使更改生效。原因:监听器进程未运行。
解决方法:
lsnrctl start;lsnrctl status(若显示“Listener is running”则表示成功);$ORACLE_HOME/network/log/listener.log文件获取详细错误信息。原因:LSNRCTL与tnslsnr进程之间的本地认证失败(常见于多网卡环境或配置修改后)。
解决方法:
listener.ora文件,使用IPC协议替代TCP:LISTENER = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = ANYTHING)) (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)))
listener.ora中添加LOCAL_OS_AUTHENTICATION=OFF;lsnrctl stop && lsnrctl start。