4

在生产环境中,我发现必须为“Microsft OLE DB Provider for SQL Server”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 Standard MDAC 2.8

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

提前感谢您的帮助。

4

2 回答 2

6

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

于 2013-08-30T13:15:33.193 回答
0

我不得不这样做几次。两个主要原因是

1) 防火墙 - 确保端口 2382 对 SQL Browser 服务开放并且允许外部连接。更多信息:sql server 防火墙端口

2) 现有 SQL 别名 - 打开“Sql Server 配置管理器”。展开“SQL Native Client 10.0 配置”,别名。如果列表中有,请检查端口是否已设置。有时这些条目会在与 ODBC 服务器设置混淆时设置。然后他们卡住了,似乎只能通过 SQL 配置管理器删除/修复它们。

于 2013-08-28T15:34:30.317 回答