常见的数据库链接问题无外乎是在数据库服务器本地能够链接SQL Server,但经过其余服务器就不能够链接。但此次我却碰到了相反的状况,在服务器本地没法经过IP/实例名链接,但从其余服务器却能够。并且每次重启后问题短暂消失,很少久后,又重现。我仍是第一次碰到这样的问题。经过深究后找到了根本缘由:居然是某杀毒软件惹的祸。。。。。数据库
报错截图安全
下面分享下个人排错过程:服务器
一.本地使用IP/实例名没法访问服务器,但经过机器名能够;网络
咱们知道,使用IP/实例名访问SQL Server时所采用的协议与使用机器名或者"."是不同的,前者是经过SQL Server的TCP/IP方式访问,后二者是经过命名管道的方式访问,既然命令管道的方式能够访问,说明数据库用户没有被禁用或者没有被拒绝远程链接,并且问题应该在tcp/ip上,也就是说这应该是一个网络问题,而不是SQL Server的配置问题。tcp
二.外部机器能够链接进来,也能够telnet DB服务器IP的1433端口;设计
这说明DB服务器的防火墙应该没有问题,再说,防火墙是防外不防内,内部不能访问确定跟防火墙没有关系。blog
另外,我在其余服务器和DB服务器上的cmd中执行netstat -ano|findstr 1433,能够看到实际上两台服务器创建了tcp链接;ip
三.在数据库服务器本地telnet 1433端口,telnet不成功;get
分析到这里的时候,我忽然想起来了以前处理的一个问题,就是服务器本地的使用的tcp端口太多了,达到了上限(65536),致使应用程序新的TCP请求无法分配到TCP端口,所以没法网络通信。这个现象跟这个状况很相似,数据库服务器本地发起数据库链接时,SSMS要分配一个本地的随机TCP端口,若是端口不够用了,确定就不能链接SQL Server了,至于外部机器为何可以链接进来,是由于他们使用的是本身的TCP端口来链接SQL Server的1433端口,并不须要数据库服务器单独再开TCP端口。cmd
根据这个思路,我经过tcpview查看数据库服务器的端口使用状况,结果令我失望了,居然很正常,难道是我判断出错了,但是按照现象应该就是这样的呀,无心中看到服务器右下角某数字公司的安全卫士,豁然开朗,安全软件常常干影响网络通信的事情,将其卸载后一切正常。。。。。
PS:本文并非黑某杀毒软件,只是想说市面常见的这些防御软件这都是为我的电脑设计的,服务器的使用状况跟我的电脑有很大不一样,请不要轻易在服务器上安装杀毒软件,以避免带来一些意想不到的坏影响。