sql-server - 为什么 SQL Server 2008 OLE DB UDL 需要显式指定端口 1433?

标签 sql-server sql-server-2008 oledb

在生产环境中,我发现必须为“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 标准版 MDAC 2.8

所有 SQL 数据库服务器: 微软 SQL Server 2008 (SP1) - 10.0.2734.0 (X64) Windows Server 企业服务包 2

预先感谢您的帮助。

最佳答案

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

关于sql-server - 为什么 SQL Server 2008 OLE DB UDL 需要显式指定端口 1433?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18491347/

相关文章:

sql-server - 如何将 rowversion 值存储在已有 rowversion 列的表中?

sql-server - 是否可以为 XML 中的数据安排外键约束?

c# - 如何从 Excel 工作表中获取列名?

c# - MS Access 排序(比较字符串数据)

sql-server - 对相同的源表和目标表使用 SQL Server MERGE 命令

php - $wpdb 特定多个数据库表条目的 SQL 语法

sql-server - 使用正则表达式(或类似的)更新字段

sql - 查找 SQL 中的所有整数间隙

sql-server - 我如何在 Sql 2008 中执行此空间查询?

c# - 从 C# 读取 Access 2007 (accdb) 文件的性能真的很慢