作者: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 报错在发包后中断 | 多为中间设备拦截返回包或协议不兼容 |
建议与经验
- 在遇到连接异常时,建议开启TNSPING或SQL*Net连接跟踪,保留第一现场证据;
- 如果trace文件中出现
ntt2err或nsprecv: error类似信息,需重点关注网络层面问题; - 对于无法确定的网络问题,应及时将trace文件提交给网络团队进行联合排查;
- 建议数据库客户端配置支持trace功能,并记录基础环境信息,便于快速定位问题。
Oracle提供的TNSPING跟踪机制,是数据库工程师进行连接问题排查的重要工具。通过掌握其使用方法与分析技巧,可以显著提升定位故障的效率与准确性,为稳定数据库运行提供有力保障。





