为啥 SQL Server 2008 OLE DB UDL 可能需要明确指定端口 1433?

Posted

技术标签:

【中文标题】为啥 SQL Server 2008 OLE DB UDL 可能需要明确指定端口 1433?【英文标题】:Why might SQL Server 2008 OLE DB UDL require port 1433 explicitly specified?为什么 SQL Server 2008 OLE DB UDL 可能需要明确指定端口 1433? 【发布时间】:2013-08-28 14:52:40 【问题描述】:

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

提前感谢您的帮助。

【问题讨论】:

如果“sqlbrowser”服务正在生产服务器上运行? 是的,实际上在所有 3 上。集群、主要和次要。 你的问题解决了我的问题! 【参考方案1】:

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

【讨论】:

这正是正在发生的事情。我想知道为什么 UDL 只会列出集群中活动服务器的名称。非常感谢!【参考方案2】:

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

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

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

【讨论】:

SQL Server Browser 服务在 1434 上运行。通过 nmap,我确认客户端机器可以在数据库服务器上打开到 1434 的连接。 SQL Native Client 10.0 中不存在别名。

以上是关于为啥 SQL Server 2008 OLE DB UDL 可能需要明确指定端口 1433?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Microsoft 不支持到 SQL Azure 的 OLE DB 连接?

在 SQL Server 中使用 OLE DB 运行多个命令或 sql 脚本

使用 sql server compact edition 生成的多步 ole db 操作

Microsoft OLE DB Provider for SQL Server 错误 '80040e14'

在 SSIS 2012 的 OLE DB 源中使用动态 SQL

SSIS OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 11.0”Hresult:0x80004005,无法确定元数据