暂无图片
暂无图片
5
暂无图片
暂无图片
暂无图片

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

作者: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=SUPPORT TNSPING.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文件中出现 ntt2errnsprecv: error 类似信息,需重点关注网络层面问题;
  3. 对于无法确定的网络问题,应及时将trace文件提交给网络团队进行联合排查;
  4. 建议数据库客户端配置支持trace功能,并记录基础环境信息,便于快速定位问题。

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

hhh6.jpg

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论