温馨提示×

Ubuntu lsnrctl网络连接问题怎么解决

小樊
41
2025-12-28 21:08:14
栏目: 智能运维

Ubuntu 上 lsnrctl 网络连接问题排查与修复

一 快速自检清单

  • 确认监听器运行状态:执行 lsnrctl status;若未运行,执行 lsnrctl start
  • 校验环境变量:确保 ORACLE_HOME、ORACLE_SID 正确并已加入 PATH,例如:
    export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
    export ORACLE_SID=orcl
    export PATH=$PATH:$ORACLE_HOME/bin
  • 检查监听端口连通性:在服务器上执行 ss -lntp | grep 1521netstat -tulnp | grep 1521;在客户端用 telnet 服务器IP 1521nc -vz 服务器IP 1521 测试。
  • 开放防火墙端口:
    Ubuntu 常用 ufw:sudo ufw allow 1521/tcp
    firewalld:sudo firewall-cmd --add-port=1521/tcp --permanent && sudo firewall-cmd --reload;
    iptables:sudo iptables -A INPUT -p tcp --dport 1521 -j ACCEPT。
  • 查看日志定位:
    监听器日志:$ORACLE_HOME/network/log/listener.log
    数据库告警日志:$ORACLE_HOME/diag/rdbms/数据库名/实例名/trace/alert_实例名.log

二 常见错误与对应处理

错误码或现象 含义与常见原因 处理要点
TNS-12541: TNS:no listener 监听器未启动/端口不对/被防火墙拦截 启动监听器:lsnrctl start;核对 listener.ora 的 HOST/PORT;放行 1521/tcp 防火墙
TNS-12560: TNS:protocol adapter error 客户端/服务器版本或网络异常 检查网络与版本兼容,确保监听端口可达
TNS-12537: TNS:connection closed 目标实例未启动或不可用 启动数据库实例(如 sudo systemctl start oracle-xe 或等效方式)
TNS-12162: TNS:net service name is incorrectly specified 连接串/服务名配置错误 修正 tnsnames.ora 或连接字符串
TNS-12154: TNS:could not resolve the connect identifier specified 无法解析连接标识 检查 tnsnames.ora 与 DNS/hosts 解析
TNS-00515: Lost connection to the Oracle server 网络中断/服务器过载 排查网络稳定性与服务器负载
启动时报 Address already in use 端口被占用 用 ss/lsof 查占用进程并终止,或更改 listener.ora 的 PORT 后重启监听器

三 配置与网络关键点

  • 正确配置 listener.ora:确保 HOST 填写服务器可被客户端解析的 IP 或主机名PORT 与客户端一致(默认 1521)。示例:
    LISTENER =
    (DESCRIPTION_LIST =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = your_hostname_or_ip)(PORT = 1521))
    )
    )
    修改后执行 lsnrctl stop && lsnrctl start(或仅 lsnrctl reload 以热加载)。
  • 修改监听端口:编辑 listener.oraPORT(如改为 1522),保存后重启监听器并用 lsnrctl status 验证新端口监听。
  • 主机名与解析:若 HOST 使用主机名,确保客户端可解析(/etc/hosts 或 DNS 正确);否则直接使用 服务器IP 更稳妥。
  • 权限与临时目录:确保 /tmp 权限为 drwxrwxrwt,且 Oracle 相关目录与文件可被 Oracle 用户访问。

四 一键式排查命令脚本

  • 查看监听状态与监听地址:
    lsnrctl status
    ss -lntp | grep 1521 || netstat -tulnp | grep 1521
  • 启动/重启监听器:
    lsnrctl stop && lsnrctl start

    或仅重载配置

    lsnrctl reload
  • 客户端连通性测试:
    telnet 服务器IP 1521 || nc -vz 服务器IP 1521
  • 防火墙放行(按系统选择其一):
    sudo ufw allow 1521/tcp
    sudo firewall-cmd --add-port=1521/tcp --permanent && sudo firewall-cmd --reload
    sudo iptables -A INPUT -p tcp --dport 1521 -j ACCEPT
  • 端口占用排查与处理:
    sudo lsof -i :1521
    sudo kill -9 # 确认进程无用后再终止
  • 日志实时查看:
    tail -f $ORACLE_HOME/network/log/listener.log
    tail -f $ORACLE_HOME/diag/rdbms///trace/alert_*.log

0