使用 lsnrctl 排查 Ubuntu 上的 Oracle 网络问题
一、定位思路与准备
sudo su - oracleecho $ORACLE_HOME $ORACLE_SID;若未设置,先导出后再执行 lsnrctl。which lsnrctl;若不在 PATH,使用绝对路径执行。必要时检查执行权限:ls -l $(which lsnrctl)。二、用 lsnrctl 快速判断监听层是否正常
lsnrctl start|stop|status(如需指定监听器名:lsnrctl start listener_name)。lsnrctl services(核对数据库服务是否已向监听器注册、对应 SID/Service 与端口是否正确)。lsnrctl reload(重新读取 listener.ora 而不中断现有连接,适合变更后快速验证)。lsnrctl trace(临时开启跟踪定位疑难问题,用后记得关闭,避免日志过大)。lsnrctl version、lsnrctl help。三、结合 Linux 工具验证网络连通性
sudo ss -lntp | grep 1521sudo netstat -anp | grep 1521sudo lsof -iTCP:1521 -sTCP:LISTENnc -vz <DB_HOST> 1521 或 telnet <DB_HOST> 1521ping <DB_HOST>、traceroute <DB_HOST>(或 tracepath)sudo ufw status、sudo ufw allow 1521/tcpsudo firewall-cmd --list-ports、sudo firewall-cmd --add-port=1521/tcp --permanent && sudo firewall-cmd --reload四、常见故障与对应处理
which lsnrctl 确认路径;echo $PATH 检查环境变量;必要时用绝对路径执行。ls -l $(which lsnrctl);若缺执行权限,可 sudo chmod +x <path>(更推荐以 oracle 用户执行)。lsnrctl status 查看状态与监听地址;lsnrctl start 启动;lsnrctl reload 使配置生效。reload。lsnrctl services 若未见目标 SID/Service,检查数据库实例是否启动、参数 LOCAL_LISTENER/REMOTE_LISTENER 与 service_names/SID 配置是否正确,随后 reload。ss/netstat/lsof 确认 1521 是否被监听或被其他进程占用;释放或更换端口后重启监听器。ufw/firewalld 放通 1521/TCP,云环境同步放通安全组规则。$ORACLE_HOME/diag/tnslsnr/<hostname>/listener/alert/log.xml 或 $ORACLE_HOME/network/log/listener.log)。lsnrctl trace,分析生成的 .trc 文件后记得关闭,避免磁盘占满。