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

inc*_*nza 4 sql-server oledb sql-server-2008

在生产环境中,我发现必须为"用于SQL Server的Microsft OLE DB提供程序"UDL明确指定端口1433.像这样:

Provider=SQLOLEDB.1;User ID=USER;Data Source=IP,1433
Run Code Online (Sandbox Code Playgroud)

如果未指定端口,则错误为:

 Test connection failed because of an error in initializing provider.
 [DBNETLIB][ConnectionOpen (Invalid Instance()).]Invalid connection.
Run Code Online (Sandbox Code Playgroud)

相同的环境,但SQL Native Client 10.1,不需要明确指定1433:

Provider=SQLNCLI10.1;Integrated Security="";Persist Security Info=False;
User ID=USER;Data Source=IP;...
Run Code Online (Sandbox Code Playgroud)

针对开发的SQL Server相同的测试,OLE DB UDL并没有要求指定的默认端口.

在什么情况下可能需要明确指定默认端口?

生产系统是群集的,具有主要的主动和辅助被动,以及与之建立连接的群集服务器.开发环境只是单个SQL Server 2008.我不知道任何其他差异.如果你认为这会影响到它,那为什么会这么重要?

客户端到SQL Server(创建UDL):Windows Server 2008 R2 Standard MDAC 2.8

所有SQL数据库服务器:Microsoft SQL Server 2008(SP1) - 10.0.2734.0(X64)Windows Server Enterprise Service Pack 2

在此先感谢您的帮助.

tgo*_*sch 6

这是群集特有的已知问题.原因是集群管理器将在一个IP /端口上应答,然后将通信切换到实际(物理)服务器,该服务器可以在不同的端口上进行通信.看起来可能没有修复,但您已经找到了解决方法.
有关详细信息,请查看此Microsoft Technet文章:http: //support.microsoft.com/kb/318432