内存不足、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的链接)能够释放端口。
阅读(1449) | 评论(0) | 转发(0) |