Ubuntu 下使用 lsnrctl 的诊断流程
一 快速定位流程
which lsnrctl、echo $PATHexport PATH=$ORACLE_HOME/bin:$PATHecho $ORACLE_HOME、echo $ORACLE_SID、echo $TNS_ADMIN~/.bashrc 中导出并 source ~/.bashrc 使生效lsnrctl status(必要时 lsnrctl status <listener_name>)lsnrctl services 查看已注册到监听器的服务lsnrctl logfile 定位日志文件$ORACLE_HOME/network/log/listener.log,以及 ORACLE_HOME/diag/tnslsnr/<host>/listener/alert/log.xml$ORACLE_HOME/diag/rdbms/<dbname>/<inst>/trace/alert_<inst>.loglsnrctl stop → lsnrctl start,或 lsnrctl reload(不中断现有连接地重载配置)二 常见故障与处理要点
lsnrctl: command not found 或 permission deniedsudo 执行TNS-12541: TNS:no listenerlsnrctl start;若端口被占用,排查并释放端口或调整 listener.ora 的 PORTTNS-12560: TNS:protocol adapter error、TNS-12162: TNS:net service name is incorrectly specifiedAddress already in usesudo ss -lntp | grep 1521 或 sudo lsof -i :1521 查 PID;确认无业务影响后 kill -9 <PID>;或改用未占用端口并重启监听器TNS-12555: TNS:permission denied(常见于 /var/tmp/.oracle)/tmp 权限应为 1777;修复 .oracle 目录权限/属主:sudo chmod 1777 /tmp,sudo chown -R oracle:oinstall /tmp/.oraclesudo ufw allow 1521/tcp;云环境同步放通安全组入站规则三 配置文件与网络检查要点
$ORACLE_HOME/network/admin/listener.ora,必要时设置 TNS_ADMIN 指向自定义网络配置目录LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
)
)
HOST 建议使用服务器 IP 或能被客户端正确解析的 FQDN;避免写 localhost 导致外部不可达tnsping <service_name> 验证解析与监听可达性telnet <服务器IP> 1521 或 nc -vz <服务器IP> 1521 测试端口连通四 高效排错命令清单
| 目的 | 命令示例 |
|---|---|
| 查看状态 | lsnrctl status / lsnrctl status LISTENER |
| 启停/重启/重载 | lsnrctl stop → lsnrctl start;lsnrctl reload |
| 服务注册信息 | lsnrctl services |
| 定位日志文件 | lsnrctl logfile |
| 实时看日志 | tail -f $ORACLE_HOME/network/log/listener.log |
| 端口占用排查 | `ss -lntp |
| 防火墙放行 | sudo ufw allow 1521/tcp |
| 客户端连通性 | tnsping <svc>;telnet <IP> 1521 |
| 环境变量检查 | echo $ORACLE_HOME $ORACLE_SID $TNS_ADMIN |
| 详细模式 | lsnrctl -v status |
| 系统日志 | tail -f /var/log/syslog |
| 以上命令覆盖了从状态、配置、日志到网络连通性的全链路排查。 |