温馨提示×

Ubuntu lsnrctl故障排除方法

小樊
46
2026-01-09 13:52:42
栏目: 智能运维

Ubuntu 下 lsnrctl 故障排除步骤

一 快速定位流程

  • 确认命令可用:执行 which lsnrctl;若未找到,说明未安装 Oracle Instant Client/数据库 或未加入 PATH
  • 检查监听器状态:执行 lsnrctl status;若未运行,执行 lsnrctl start
  • 查看监听日志:打开 $ORACLE_HOME/network/log/listener.log,优先根据日志报错定位。
  • 校验关键环境变量:确保 ORACLE_HOME、ORACLE_SID、PATH 正确(如 export ORACLE_HOME=/opt/oracle/product/19.0.0/dbhome_1; export ORACLE_SID=orcl; export PATH=$ORACLE_HOME/bin:$PATH)。
  • 检查端口占用:执行 sudo netstat -tulnp | grep 1521sudo lsof -i :1521,若冲突,结束占用进程或改用未占用端口(如 1522)。
  • 防火墙放行:执行 sudo ufw allow 1521/tcp 或按需配置 iptables
  • 配置文件语法:核对 $ORACLE_HOME/network/admin/listener.oraLISTENERHOST(服务器IP/主机名)与 PORT(默认 1521)。

二 常见错误与修复对照表

症状/错误码 可能原因 修复要点
command not found Oracle 未安装或 PATH 未包含 $ORACLE_HOME/bin 安装 Instant Client/数据库;export PATH=$PATH:$ORACLE_HOME/bin
TNS-12541: TNS:no listener 监听器未启动 执行 lsnrctl start;确认端口未被占用
Address already in use 端口 1521 被占用 用 netstat/lsof 查 PID 并 kill;或 listener.ora 改为 1522
TNS-12560 / TNS-00535 环境变量错误、协议适配器问题 校正 ORACLE_HOME、ORACLE_SID、PATH;必要时用绝对路径执行
TNS-12537: TNS:connection closed 网络不通或防火墙拦截 客户端/服务器双向放行 1521/tcp;测试连通性
TNS-12514 监听未注册请求的服务名 确认数据库实例已启动并动态注册;必要时在 listener.ora 的 SID_LIST_LISTENER 静态注册
TNS-01151 listener.ora 段名/语法错误 修正 LISTENER 段名与括号匹配,重启监听
TNS-12555 / Linux Error: 1 /tmp 或 /var/tmp/.oracle 权限不当 确保 /tmp 权限为 1777;修正 .oracle 目录属主(如 oracle:dba)
Illegal seek 旧版 Oracle 脚本与 dash 不兼容 执行 dpkg-reconfigure dash 选 No,改用 bash
error while loading shared libraries 依赖库缺失(如 libncurses.so.5) 安装相应库;或设置 LD_LIBRARY_PATH=$ORACLE_HOME/lib

三 配置文件与兼容性要点

  • 最小可用 listener.ora 示例(按需调整 HOST 为服务器 IP/可解析主机名):
    LISTENER =
    (DESCRIPTION_LIST =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = your_host_or_ip)(PORT = 1521))
    )
    )
  • 静态注册(当动态注册异常时使用):
    SID_LIST_LISTENER =
    (SID_LIST =
    (SID_DESC =
    (SID_NAME = your_sid)
    (ORACLE_HOME = /opt/oracle/product/19.0.0/dbhome_1)
    )
    )
  • 旧版 Oracle 11g 在 Ubuntu 上可能出现脚本兼容问题:将默认 shdash 切回 bash(dpkg-reconfigure dash → 选 No)。
  • 库路径问题:设置 LD_LIBRARY_PATH=$ORACLE_HOME/lib 或将 Oracle lib 加入系统库缓存。

四 网络与防火墙检查

  • 本机端口:确认监听端口在监听(netstat/lsof),必要时改用 1522 并更新客户端连接串。
  • 服务器防火墙:
    • UFW:sudo ufw allow 1521/tcp && sudo ufw reload
    • iptables:sudo iptables -A INPUT -p tcp --dport 1521 -j ACCEPT
  • 客户端与中间网络:确保客户端出站放行 1521/tcp,并排查云安全组/ACL 策略。
  • 连通性测试:从客户端执行 telnet 服务器IP 1521nc -vz 服务器IP 1521

五 日志与进一步诊断

  • 监听日志:查看 $ORACLE_HOME/network/log/listener.log,关注启动失败、地址冲突、权限拒绝等行。
  • 诊断目录:新版本日志通常在 $ORACLE_HOME/diag/tnslsnr/<listener_name>/trace/(如 alert/log.xml、trace/*.trc)。
  • 数据库告警日志:路径 $ORACLE_HOME/diag/rdbms///trace/alert_.log,用于关联实例侧问题。
  • 动态注册验证:lsnrctl status 输出中应能看到已注册的 SERVICE_NAME/SID;若缺失,先确认实例已启动(sqlplus / as sysdba)并检查 local_listener 参数。

0