为什么SQL Server 2008 OLE DB UDL需要明确指定端口1433?

时间:2013-08-28 14:52:40

标签: sql-server sql-server-2008 oledb

在生产环境中,我发现必须为“用于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

提前感谢您的帮助。

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管理器删除/修复它们。