0

0

如何管理RAC的客户端连接超时_sqlnet.ora中的TCP.VALIDNODE_CHECKING

P粉602998670

P粉602998670

发布时间:2026-03-11 20:21:19

|

355人浏览过

|

来源于php中文网

原创

SQL*Net客户端连接超时由客户端操作系统TCP超时和Oracle客户端CONNECT_TIMEOUT(12cR2+)控制;旧版需用SQLNET.OUTBOUND_CONNECT_TIMEOUT,且须确保sqlnet.ora路径正确并被OCI程序加载。

SQL*Net 客户端连接超时由谁控制?

不是 tcp.validnode_checking,它只管 ip 白名单,跟超时完全无关。真正影响客户端连接等待时间的,是 sqlnet.expire_time 和底层 tcp keepalive(如果启用),但这两者作用对象不同:sqlnet.expire_time 是服务端主动发探测包判断客户端是否存活,用于清理僵死连接;而客户端发起连接时的“连不上就报错”行为,主要取决于客户端操作系统 tcp 连接超时(linux 默认 20–30 秒)和 oracle 客户端自身的 connect_timeout(12cr2+ 才支持)。

如何缩短客户端连接失败的等待时间?

旧版 Oracle 客户端(12cR1 及以前)没有原生 CONNECT_TIMEOUT,只能靠绕行方案:

  • sqlnet.ora 中设置 SQLNET.OUTBOUND_CONNECT_TIMEOUT=3(单位秒),它限制的是客户端建立 TCP 连接 + 完成 Oracle 协议握手的总耗时,对 DNS 解析、TCP SYN 重传都生效
  • 确保 sqlnet.ora 被客户端正确加载:路径需在 $TNS_ADMIN 下,或与可执行文件同目录,Windows 下注意注册表 ORACLE_HOME 是否指向正确位置
  • 避免和 TCP.CONNECT_TIMEOUT 混用——这个参数不存在,Oracle 文档里没这玩意,搜到的都是误传

TCP.VALIDNODE_CHECKING 实际怎么用?

它只是个开关加白名单机制,不参与超时逻辑,但配置错误会导致连接直接被拒绝,现象像“超时”:

Dora
Dora

创建令人惊叹的3D动画网站,无需编写一行代码。

下载
  • 启用后必须配 TCP.INVITED_NODES,否则默认拒绝所有节点;空列表或未定义 = 全拒
  • TCP.VALIDNODE_CHECKING=yes 时,主机名解析结果若含多个 IP,只要有一个在白名单内就放行;但 DNS 不稳定时可能因解析顺序导致偶发拒绝
  • 白名单写法要小心:192.168.1.* 有效,192.168.1.0/24 无效;主机名必须能被服务器正向/反向解析一致,否则校验失败
  • 常见错误信息是 ORA-12537: TNS:connection closed 或无声断连,查 $ORACLE_HOME/network/log/sqlnet.log 才能看到 “Valid node checking is enabled…” 的拒绝记录

为什么改了 sqlnet.ora 还不生效?

因为 Oracle 客户端不自动重读 sqlnet.ora,且不同组件加载时机不同:

  • SQL*Plus、JDBC thin 驱动不读 sqlnet.ora(JDBC 用连接字符串参数控制超时)
  • OCI 程序(如 expdp、rman、PL/SQL Developer)才读;但 OCI 初始化后不会重新加载,需重启应用进程
  • 监听器(listener.ora)和数据库实例各自有独立的 sqlnet.ora 加载路径,客户端改的只是自己那一份,不影响服务端行为
  • Linux 下注意 SELinux 或防火墙拦截了探测包,会导致 SQLNET.EXPIRE_TIME 表现异常,但和连接建立超时无关

最常被忽略的是:客户端超时控制本质是分层的——DNS 超时、TCP 握手超时、Oracle 协议协商超时,每层都有独立机制,混在一起调很容易互相掩盖问题。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

1133

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

340

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

381

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2152

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

380

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

1663

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

585

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

440

2024.04.29

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号