数据库基础系列之三:Sql Server连接端口
Sql Server连接的端口问题
昨天遇到一个比较奇怪的问题,机器A、机器B,都装有Sql Server2000,C#程序从A连B上的数据库OK,但是从B连A的数据库总是有异常,异常提示“在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败”。
由于A、B上都装有VS2005,带着装了Sql Server2005Express,当时便怀疑是Sql Server2005在搞鬼,拿异常信息上网搜了一下,按照网上的解决方法一步步配置了Sql Server2005,结果问题并没有解决。
后来发现这些异常信息有时候也会误导人,实际的问题跟Sql Server2005Express并没有关系,而是出在Sql Server2000的端口设置上,因为A机器上的数据库端口不是默认的1433,导致程序连接不上。
关于Sql Server2000远程连接,也找到了一篇文章,整理一下,以后可以按下面的步骤处理:
1)看Ping 服务器IP能否能通。这个实际上是看和远程Sql Server 2000服务器的物理连接是否存在。如果不行,请检查网络,查看配置,当然得确保远程Sql Server 2000服务器的IP拼写正确。
2)在Dos或命令行下输入Telnet 服务器IP端口,看能否连通。如Telnet 202.114.100.100 1433。1433是Sql Server 2000的对于Tcp/IP的默认侦听端口。如果这一步有问题,应该检查以下选项:
(1)检查远程服务器是否启动了Sql Server 2000服务。如果没有,则启动。
(2)检查服务器端有没启用Tcp/IP协议,因为远程连接(通过因特网)需要靠这个协议。检查方法是,在服务器上打开开始菜单->程序->Microsoft SQL Server->服务器网络实用工具,看启用的协议里是否有Tcp/IP协议,如果没有,则启用它。
(3)检查服务器的Tcp/IP端口是否配置为1433端口。仍然在服务器网络实用工具里查看启用协议里面的Tcp/IP的属性,确保默认端口为1433,并且隐藏服务器复选框没有勾上。
事实上,如果默认端口被修改,也是可以的,但是在客户端做Telnet测试时,写服务器端口号时必须与服务器配置的端口号保持一致。如果隐藏服务器复选框被勾选,则意味着客户端无法通过枚举服务器来看到这台服务器,起到了保护的作用,但不影响连接,但是Tcp/IP协议的默认端口将被隐式修改为2433,在客户端连接时必须作相应的改变。
(如果端口不是1433,则在程序中设置连接字符串时,应类似“server=192.168.6.10,2433;database=….”)
(4)如果服务器端操作系统打过sp2补丁,则要对windows防火墙作一定的配置,要对它开放1433端口,通常在测试时可以直接关掉windows防火墙(其他的防火墙也关掉最好)。
(5)检查服务器是否在1433端口侦听。如果服务器没有在Tcp连接的1433端口侦听,则是连接不上的。检查方法是在服务器的dos或命令行下面输入:netstat -a -n 或者是netstat -an,在结果列表里看是否有类似 tcp 127.0.0.1 1433 listening 的项。如果没有,则通常需要给Sql Server 2000打上至少sp3的补丁。