在生产环境中,我发现必须为“用于SQL Server的Microsft OLE DB提供程序”UDL显式指定端口1433。像这样:
Provider=SQLOLEDB.1;User ID=USER;Data Source=IP,1433
如果未指定端口,则错误为:
Test connection failed because of an error in initializing provider.
[DBNETLIB][ConnectionOpen (Invalid Instance()).]Invalid connection.
相同的环境,但SQL Native Client 10.1,不需要明确指定1433:
Provider=SQLNCLI10.1;Integrated Security="";Persist Security Info=False;
User ID=USER;Data Source=IP;...
针对开发SQL Server的相同测试,OLE DB UDL 不需要指定默认端口。
在什么情况下可能需要明确指定默认端口?
生产系统是群集的,具有主要的主动和辅助被动,以及与之建立连接的群集服务器。开发环境只是单个SQL Server 2008.我不知道任何其他差异。如果你认为这会影响它,那为什么会这么重要?
客户端到SQL Server(创建UDL的地方): Windows Server 2008 R2标准版 MDAC 2.8
所有SQL数据库服务器: Microsoft SQL Server 2008(SP1) - 10.0.2734.0(X64) Windows Server Enterprise Service Pack 2
提前感谢您的帮助。
答案 0 :(得分:6)
这是群集特有的已知问题。原因是集群管理器将在一个IP /端口上应答,然后将通信切换到实际(物理)服务器,该服务器可以在不同的端口上进行通信。看起来可能没有修复,但您已经找到了解决方法 有关详细信息,请查看此Microsoft Technet文章:http://support.microsoft.com/kb/318432
答案 1 :(得分:0)
我必须这样做几次。两个主要原因是
1)防火墙 - 确保端口2382对SQL Browser服务打开,并允许外部连接。更多信息:sql server firewall ports
2)现有SQL别名 - 打开" Sql Server配置管理器"。展开" SQL Native Client 10.0配置",别名。如果列表中有任何内容,请检查端口是否已设置。有时在弄乱ODBC服务器设置时会设置这些条目。然后它们卡住了,似乎只能通过SQL Config管理器删除/修复它们。