很久不配环境了, 新装的一套Windows Server 2008 R2的环境, 发现程序连不上SQL server.
1. 用test.udl连接不上.
2. 抓网络包, 看到三次握手成功. 连不上的原因是SQL Server返回了这条网络包.
458 7:53:48 AM 7/12/2012 33.3707944 System 10.4.2.5 10.4.2.7 SMB2 SMB2:R - NT Status: System - Error, Code = (22) STATUS_MORE_PROCESSING_REQUIRED SESSION SETUP (0x1), SessionFlags=0x0 {SMBOverTCP:12, TCP:11, IPv4:9}
3. 于是, 在Windows Server 2008 R2的feature里添加Telnet Client. 发现SQL Server的1433端口不通.
4. Remote到SQL机器上, 使用命令netstat –ano查看1433端口是否正在被SQL机器监听. 发现正在监听, 正常.
监听1433的进程正是sqlservr.exe, 进程ID是4288.
5. 打开Windows Firewall的配置处, 点击Advanced Settings.
选择Inbound Rules->New Rules->Port->TCP: 1433->Allow the connection->Domain,Private,Public->Name: SQL 1433
保存.
6. 回到客户端机器上, 重新telnet SQL, 连接SQL成功.
小结
===================
在这次排查中, 我们用到了telnet命令和netstat命令.
还用到了UDL文件来测试连接SQL服务.
解决问题的是我们创建了一条Windows Firewall的一条规则, 这条规则让其他的机器能够连接到SQL服务上.
这是一次对连接SQL的典型排错, 希望会大家会有帮助.
致谢
==================
感谢Peter Zhu提供帮助.