因为在局域网中,SQL服务器默认优先使用命名管道,所以在web服务器使用SSMS可以成功连接数据库不出奇
我之前做的一份总结,LZ可以参考一下:
--TCP/IP协议连接失败检测
--如果新添加TCP/IP协议,需要重启SQL才能生效。
--如果SQL服务器的IP地址改变,重启SQL或者重启电脑就可以了
--在配置管理器里默认的TCP/IP的端口号是1433。
--你可以改变这个默认值为别的端口号,只要该端口号没有被系统或别的
--应用程序占用即可。
--使用netstat命令监听SQL监听的端口
--netstat /ano
--根据最后一列pid找到SQL的进程
--列出系统中所有使用中的端口号
--TCP:1433 是SQL服务自己侦听的 UDP:1434是SQL Browser侦听的
---------------------客户端的TCP/IP协议配置-----------------------------------------
--cliconfg客户端网络实用工具配置启用TCP/IP协议
--解决步骤:
--1、是否监听TCP/IP 看SQL的errorlog
--Server is listening on [ 'any' 1433].
--如果没有监听,请运行sernetcn.exe确认是否配置好SQL监听TCP/IP协议
--2、验证服务器监听的TCP/IP端口和客户端配置的默认值或别名中指定的值一致
--3、检查网络连通性
--要ping通IP地址 ping通SQL服务器的计算机名
--如果ping计算机名有问题,说明DNS或者WINS服务器有问题
--4、使用telnet命令检查SQL监听端口
--telnet 192.168.1.100 1433
--如果成功,那么结果是一个只有光标在闪的黑色屏幕。如果不成功,你会得到出错信息
--5、检查登录用户SQL访问权限
--6、TCP/IP端口绑定失败
--如果配置的静态端口被其他服务或应用程序占用,SQL将无法在该端口绑定监听。
--在SQL日志中会有如下信息:
--server supersocket info:bind failed on TCP port 1433
--这时候可以指定其他静态端口,或者停止一些服务或应用程序后重启
--7、检查连接使用的协议
SELECT net_library,hostname,program_name,nt_domain,nt_username,loginame from sys.sysprocesses WHERE spid=@@SPID
--8、访问防火墙后面的SQL
--必须配置防火墙以允许从*ANY*到1433的通信,以及从1433到*ANY*的通信,其中*ANY*是大于1024的端口
--*ANY*->1433
--1433->*ANY*
--如果SQL监听的不是1433端口,那么要把上面的端口做相应的变化,如果是命名实例并使用动态端口,
--还必须打开UDP1434端口
--*ANY*->1434
--1434->*ANY*
--9、在SSMS中指定连接的协议和端口
--默认实例
--tcp:MySQLServer,1433
--命名实例
--tcp:MYSQLServer\inst1,1433
--10、最后一招
--使用network monitor工具捕捉网络包分析。有些连接和认证问题常规手段不能解决
--使用network monitor来分析问题的直接原因。
给我写信: QQ我: