Oracle连接问题排查实录:TNSPING跟踪在定位故障中的实战应用

来源:这里教程网 时间:2026-03-03 22:17:31 作者:

作者:Digital Observer(施嘉伟) Oracle  ACE Pro: Database PostgreSQL  ACE Partner 11年数据库行业经验,现主要从事数据库服务工作 拥有Oracle  OCM、DB2 10.1 Fundamentals、MySQL 8.0 OCP、WebLogic 12c OCA、KCP、PCTP、PCSD、 PGCM、OCI、PolarDB技术专家、达梦师资认证、数据安全咨询高级等认证 ITPUB认证专家、PolarDB开源社区技术顾问、HaloDB技术顾问、TiDB社区技术布道师、青学会MOP技术社区专家顾问、国内某高校企业实践指导教师 公众号:Digital Observer;CSDN:施嘉伟;ITPUB:sjw1933;墨天轮:Digital Observer;PGFans:施嘉伟。

在数据库运维过程中,客户端无法连接Oracle数据库是一个常见但又复杂的问题。许多情况下,客户端与服务端之间的网络表面上看似“通畅”,例如通过  ping 命令能成功到达目标服务器,但实际上数据库连接仍然失败。这类问题的根本原因往往隐藏在网络层的中间设备、协议交互细节或客户端配置当中。

Oracle连接机制涉及TNS解析、TCP端口、监听服务、服务名、连接包大小协商、长连接机制等多个方面,排查难度较高。本文通过一个典型的TNSPING跟踪分析案例,介绍如何借助Oracle的连接跟踪功能,有效定位客户端连接失败的根本原因,为数据库运维人员提供可借鉴的实践思路。

背景描述

在某生产环境中,客户端通过  ping 能成功访问数据库服务器,但在进行  tnsping 或连接数据库操作时出现如下错误:

TNS-12537: TNS: 连接关闭

初步检查确认监听进程正常运行,数据库也已启动,TNSNAMES配置无误,端口未被防火墙封锁。为进一步定位问题,决定开启  tnsping 的详细跟踪功能进行排查。

启用 TNSPING 跟踪功能

在客户端的  sqlnet.ora 文件中加入以下参数:

TNSPING.TRACE_LEVEL=SUPPORTTNSPING.TRACE_DIRECTORY=D:\oracle\trace

参数说明:

  • TNSPING.TRACE_LEVEL:指定跟踪级别, SUPPORT 为最 高级别,记录最完整的连接信息;
  • TNSPING.TRACE_DIRECTORY:指定跟踪文件的输出目录。

    配置完成后,执行以下命令进行连接测试:

    tnsping oracle_157

    终端输出:

    Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.20.10.157)(PORT = 1521))) (CONNECT_DATA = (SID = credit1)))
    TNS-12537: TNS: 连接关闭

    跟踪文件分析

    打开生成的  tnsping.trc 文件,可完整回溯客户端连接数据库的过程。以下为关键过程摘要和分析:

    TNS别名解析成功

    nnftrne: Using tnsnames.ora address (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.20.10.155)(PORT = 1521)) (CONNECT_DATA = (SID = credit1)))

    说明客户端已正确读取并解析  tnsnames.ora 文件中的目标连接配置。

    TCP连接建立成功

    nttcon: NT layer TCP/IP connection has been established.

    表示客户端成功与服务端建立了TCP三次握手,网络层无明显阻断。

    请求包发送成功

    nspsend: 87 bytes to transport(发包成功)

    客户端发起连接请求包(87字节)被正常发送。

    响应阶段发生异常

    ntt2err: soc 1808 error – operation=5, ntresnt[0]=530, ntresnt[1]=53
    nsprecv: error exit

    该错误代表:连接建立成功但在接收数据库返回数据时失败。即服务端未返回应答或应答被阻断。

    原因定位:防火墙或中间设备拦截回包

    根据MOS文档《ORA-3113 reported when using NitroSecurity Firewall》(Doc ID 1388804.1)描述,该问题与网络中间设备(如防火墙)拦截数据库返回包有关,尤其是对TNS协议或特定长度数据包的过滤。

    最终将该问题与跟踪结果提交至网络团队,经核查确认:路径中存在安全策略对某些TCP返回包进行拦截,导致客户端收不到数据库的握手应答。策略优化后,连接恢复正常。

    总结

    TNSPING本质上用于验证客户端至数据库监听服务的可达性。它虽然不建立完整的登录会话,但足以验证DNS解析、监听端口响应、初始握手流程等关键步骤。在配合SUPPORT级别的跟踪功能后,可以完整记录连接每一步的行为,从而有效判断问题出现的阶段。

    常见连接问题定位思路:

    排查点 描述
    ping 能通但无法连接 可能为端口未开放、服务未监听或应用层拦截
    telnet 无响应 多为端口不可达,检查防火墙或监听服务状态
    tnsping 报错但监听正常 可能为中间设备阻断、客户端参数错误、包结构异常
    trace 报错在发包后中断 多为中间设备拦截返回包或协议不兼容

    建议与经验

    1. 在遇到连接异常时,建议开启TNSPING或SQL*Net连接跟踪,保留第一现场证据;
    2. 如果trace文件中出现  ntt2err 或  nsprecv: error 类似信息,需重点关注网络层面问题;
    3. 对于无法确定的网络问题,应及时将trace文件提交给网络团队进行联合排查;
    4. 建议数据库客户端配置支持trace功能,并记录基础环境信息,便于快速定位问题。

    Oracle提供的TNSPING跟踪机制,是数据库工程师进行连接问题排查的重要工具。通过掌握其使用方法与分析技巧,可以显著提升定位故障的效率与准确性,为稳定数据库运行提供有力保障。

    hhh6.jpg

    面试技巧

    面试时经常会被问到运维过什么版本的数据库,如果运维过  Oracle 8i、  9i这些老古董,通常会给面试官一个经验丰富、老前辈的印象,一个  8i OCP的认证绝对比  19C OCP更有说服力,  …… 说了这么多废话,其实是想打一个广告,欢迎加入  DBA  面试宝典知识星球,解锁更多面试技巧!

    图片

  • 相关推荐