WINDOWS TNS-12560 最大占用端口数

1520阅读 0评论2021-11-23 brjl
分类:Oracle

内存不足、tcp缓冲区(应该是这个意思)空间不足都有可能导致tns-12560
这次又是新情况

一个长期使用的windows 2008 64位系统安装11.2.0.3 数据库,忽然应用报连接不上了,哪也没动。
上去检查数据库,实例状态正常,告警日志正常。

检查侦听状态


尝试用户连接

方法是开启跟踪诊断连接
打开net manager,找到 local ->profile->general,然后开启客户端的support级别诊断(下图仅是示例)


重新发起连接后,在adr的base目录下会生成跟踪trc文件,文件名类似以下:

打开trc文件看看其中的报错信息,从上往下搜索12560:

看不懂,就继续搜,下面还会出现:

根据这个去MOS上匹配,看看有什么类似的案例。

不幸的是,搜索windows err code: 12564并没有什么发现,回看lsnrctl 的报错,输出windows error 55,这个有些眼熟,检查当前连接。执行 netstat -ano,有很多输出,看tcp的端口:

端口几乎耗尽(最大应该是65536个)。

原因是:
当Windows2008R2系统运行时间超过497天,TCP/IP的网络资源(端口)就不会再自动释放,在运行一段时间后,本机的网络资源就会被全部用光。这样就会造成系统中任何需要网络资源的组件都无法正常工作。

解决方法:
打补丁永久解决,或者重启操作系统临时解决。
windows补丁见 support.microsoft.com/kb/2553549

参考:
 support.huawei.com/enterprise/zh/knowledge/EKB1000046814
 download.csdn.net/download/haolong568/12014368

再补充两句:
 诊断windows平台上的问题时,注意以管理员身份运行相关cmd窗口,避免一些低级错误。
 这个报错执行lsnrctl stat偶尔不会报错(说明有端口释放了)
 虽然开启连接跟踪没发现有价值信息,但也是一种重要方法,如果不管用就得多角度测试
 这个问题之前遇到过类似的也是windows error:55,参见 blog.chinaunix.net/uid-20687159-id-5845305.html,处理起来就不太陌生了。
 这次 netstat -ano 的输出证实了这个问题。
 重启侦听不管用,重启网卡不知道是否会释放,命令如下:
  netsh interface set interface "本地连接" disable 
  netsh interface set interface "本地连接" enable
  最好放在一个bat里用管理员执行
不知道是否可以通过注册表修改配置(参考2的链接)能够释放端口。
上一篇:16进制转换字符
下一篇:log miner 19c最常用过程