近期有收到不少关于MSSQL数据库连接的问题,其中各个版本的都存在。
——这里暂时不提SQL2000的连接内容,因为此文与之没有组件上存在的问题。
对于SQL2005开始的一些连接问题,这里引用CSDN论坛 中的图片。如下图1
一、当出现无法连接到服务器 的错误提示时,原因可能是单方面的,比如以下几点:
1)本机网路无法到达服务器。
×尝试ping服务器IP得知网络是否畅通。(前提是服务器开启ICMP协议)
√关闭本地和服务器防火墙。
2)服务器SQL服务没有开启。
×尝试telnet 服务器IP 1433得知SQL服务是否正常。
√服务器端打开CMD输入net start mssqlserver,开启默认SQL服务。
3)服务器是否配置TCP/IP协议。
。。。
以上这些都是解决问题的基本步骤,我们重点不在这里。
二、其他信息提示已成功与服务器建立连接,但是在登录过程中发生错误。 时,根据不同的错误代码分析如下:
1)错误64,provider:TCP提供程序,error:0 - 指定的网络名不再可用。
当网络链路发生断开时,通常会返回上述错误,无论是数据库软件还是其他应用软件。所以首先检查网络连接情况,排除网络断开或超时的发生。
比较直接的方式是PING 服务器IP -t,查看是否存在数据库丢包。
2)错误233,provider:共享内存提供程序,error:0 -管道的另一端上无任何进程。
当客户端的连接数已经达到数据库实例的连接配置最大值时,通常会返回上述错误,此时客户端再也无法连接或成功登录数据库。而此时有的朋友会做重启OS的动作,重启后就可以再连接直至连接数被耗尽而再次ERR。
比较客观的方式是正确配置实例的连接数,比如设置user connections为0。
三、如何检查上述两种连接的错误是否存在配置问题呢?
我们执行以下T-SQL:
select name,value,value_in_use
from sys.configurations
where name in (
'user connections' ,
'network packet size (B)' ,
'remote query timeout (s)' ,
'query wait (s)' ,
'min server memory (MB)' ,
'max server memory (MB)' )
其中value是相应name的配置值,而value_in_use是目前正在使用的配置值,
各name分别是用户连接数、网络数据包尺寸、远程查询超时数、查询等待数以及最小和最大内存配置数。
这里强调value和value_in_use的区别是,当两个配置值不同时,表示我们已经执行了配置数的修改,但没有做reconfigure来更新配置。
四、如何处理上述连接错误的问题呢?
对于错误233的连接数被耗尽这里我们只能用专用管理员DAC连接处理。当无法进行DAC连接的处理方式,请移步发现无法连接DAC的解决方法 处理。
在SSMS中服务器名称前输入 admin:服务器IP 登录专用管理员模式,执行以下T-SQL:
其中设置user connections为0,表示不限制用户登录。