温馨提示×

centos里sqlplus网络连接问题排查

小樊
39
2025-12-21 11:30:04
栏目: 云计算

CentOS 下 sqlplus 网络连接排查手册

一 快速定位流程

  • 明确目标地址与端口:确认数据库的 主机/IP端口(默认 1521),避免把端口误写成 22
  • 本地连通性测试:在客户端执行 ping 目标主机;使用 telnet 目标主机 1521nc -vz 目标主机 1521 验证端口可达。
  • 监听与服务状态:在数据库服务器执行 lsnrctl status 查看监听;若未启动,执行 lsnrctl start
  • 数据库实例状态:在服务器本地以 sqlplus / as sysdba 登录,执行 select status from v$instance; 确认实例为 OPEN
  • 客户端解析与连通:使用 tnsping 服务名 验证解析与连通;必要时用 sqlplus 用户名/密码@//主机:端口/服务名 的 EZCONNECT 直连绕过 tnsnames。
  • 防火墙与安全组:确保服务器与中间网络放行 TCP 1521
    以上步骤覆盖了最常见的网络层与监听层问题,可快速判断是网络不通、监听未起、实例未开还是解析错误。

二 常见错误与对应处理

现象/错误 可能原因 处理要点
TNS:connect timeout / ORA-12170 网络不通、监听未启动、端口被防火墙阻断 先 ping 与 telnet/nc 到 1521;服务器上 lsnrctl start;放行 firewalld 或云安全组 TCP 1521
TNS:no listener / ORA-12541 监听未运行或配置异常 启动监听 lsnrctl start;检查 $ORACLE_HOME/network/admin/listener.oraHOST/PORT 是否正确
TNS:protocol adapter error / ORA-12560 客户端协议/适配器问题、环境变量异常 检查 sqlnet.oraTNS_ADMIN;确认 ORACLE_HOME/PATH 正确;用 EZCONNECT 直连验证
invalid username/password / ORA-01017 账号或密码错误 重置密码或确认账户状态;必要时用 sqlplus sys/密码@//主机:1521/服务名 as sysdba 登录后修改
TNS:could not resolve the connect identifier tnsnames.ora 解析失败或主机名错误 修正 tnsnames.oraHOST/PORT/SERVICE_NAME;用 tnsping 验证;确保 NAMES.DIRECTORY_PATH 包含 TNSNAMES
Linux Error 101 / Network is unreachable 路由/网卡/安全组不通 检查路由与网卡;确认云主机安全组与本地防火墙放行 1521
PL/SQL 连虚拟机超时 虚拟机网络未桥接/仅 NAT、监听未起、端口未放行 修正虚拟机网络模式;服务器上 lsnrctl start;放行 firewalld 或临时关闭测试
以上错误码与处置方法是 sqlplus 连接问题的高频场景,按表格逐项核对可显著缩短排障时间。

三 服务器端检查与修复

  • 监听状态与配置:执行 lsnrctl status;若未启动,执行 lsnrctl start。检查 $ORACLE_HOME/network/admin/listener.ora 是否包含正确的 (PROTOCOL=TCP)(HOST=…)(PORT=1521);必要时用 netca 重建监听。
  • 实例状态:本地 sqlplus / as sysdba,执行 select status from v$instance;;若未 OPEN,执行 startup。多租户环境需确认 PDBREAD WRITE,必要时 ALTER PLUGGABLE DATABASE OPEN 并执行 ALTER SYSTEM REGISTER 刷新服务注册。
  • 防火墙放行:执行 firewall-cmd --permanent --add-port=1521/tcp && firewall-cmd --reload;如使用云主机,同步在安全组放行 TCP 1521
  • 本地直连验证:执行 sqlplus sys/密码@localhost:1521/服务名 as sysdba 排除网络路径问题。
    以上步骤覆盖了监听、实例、注册与防火墙四个关键面,通常可定位并修复服务器端问题。

四 客户端检查与修复

  • 环境变量:确认 ORACLE_HOME、TNS_ADMIN、PATH 正确,例如:
    export ORACLE_HOME=/u01/app/oracle/product/19c
    export TNS_ADMIN=$ORACLE_HOME/network/admin
    export PATH=$ORACLE_HOME/bin:$PATH
  • 连接串与解析:优先用 EZCONNECT 直连验证网络与监听:
    sqlplus 用户名/密码@//主机:1521/服务名
    若使用 tnsnames.ora,确保 HOST/PORT/SERVICE_NAME 正确,并用 tnsping 服务名 验证。
  • 防火墙与路由:客户端所在网络与中间防火墙需允许 TCP 1521;跨机房/云环境同步检查安全组与路由。
  • 版本兼容:确认 SQL*Plus 版本 与数据库版本兼容,必要时升级客户端。
    通过环境变量、直连验证与解析检查,可快速判断是否为客户端配置或网络路径问题。

五 一键排查脚本与最小配置文件示例

  • 最小可用配置示例
    • listener.ora($ORACLE_HOME/network/admin)
      LISTENER =
      (DESCRIPTION_LIST =
      (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = your_host)(PORT = 1521))
      )
      )
    • tnsnames.ora($ORACLE_HOME/network/admin)
      ORCL =
      (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = your_host)(PORT = 1521))
      (CONNECT_DATA =
      (SERVICE_NAME = orcl)
      )
      )
  • 一键排查脚本(在客户端执行)
    #!/usr/bin/env bash
    set -e
    echo “=== 1) 基本连通性 ===”
    ping -c 4 your_db_host || echo “[WARN] ping 不通”
    nc -vz your_db_host 1521 || echo “[WARN] 1521 端口不通”
    echo “=== 2) TNS 解析与直连 ===”
    tnsping ORCL || echo “[WARN] tnsping 失败”
    sqlplus -L -S scott/tiger@//your_db_host:1521/orcl <<<‘select 1 from dual;’ && echo “[OK] EZCONNECT 直连成功” || echo “[FAIL] EZCONNECT 直连失败”
    echo “=== 3) 环境检查 ===”
    echo “ORACLE_HOME=$ORACLE_HOME”
    echo “TNS_ADMIN=$TNS_ADMIN”
    which sqlplus
    以上配置与脚本覆盖了最常见的监听与解析问题,适合作为首次接入或故障复现时的标准检查流程。

0