本文修复了 Operations Manager 管理服务器无法连接到托管数据仓库数据库的 SQL Server 群集的问题。
原始产品版本: System Center 2012 R2 Operations Manager,Microsoft System Center 2012 Operations Manager
原始 KB 数: 3084547
现象
System Center Operations Manager 管理服务器无法连接到或与托管数据仓库数据库的 SQL Server 群集通信。 在这种情况下,事件 ID 31551 记录在 Operations Manager 日志中,以及与各种工作流名称类似的说明:
日志名称: Operations Manager
源: 运行状况服务模块
日期:
事件 ID: 31551
任务类别: 数据仓库
级别:错误
关键字:经典
用户:无
计算机:server.Contoso.com
说明:
无法在数据仓库中存储数据。 将重试该操作。
异常“SqlException”:与 SQL Server 建立连接时发生与网络相关的或特定于实例的错误。 找不到或无法访问服务器。 请验证实例名称是否正确,SQL Server 是否已配置为允许远程连接。 (提供程序:SQL 网络接口,错误:26 - 定位指定服务器/实例出错)一个或多个工作流受此影响。
工作流名称: Microsoft.SystemCenter.DataWarehouse.CollectEventData
实例名称:server.Contoso.com
实例 ID:{8A13A832-776E-096E-32E7-DC479FCD6DBC}
管理组:SupportGroup
原因
此处的焦点应位于以下字符串上:
error: 26 - 错误查找指定的服务器/实例时出错
此错误通常被认为是因为服务器上未启用远程连接。 但是,当客户端无法从 SQL Server 浏览器接收 SQL Server 解析协议 (SSRP) 响应 UDP 数据包时,实际上会生成此错误。 此行为通常是因为管理服务器与托管 Operations Manager 数据仓库的 SQL Server 群集之间阻止了 UDP 端口通信。
注意
仅当尝试连接到 SQL Server 命名实例时,才会发生此错误。 连接到默认实例时不应发生此情况。 也就是说,即使连接尝试在此阶段失败(例如,由于找到指定的服务器或实例时出错),它将继续尝试使用默认值进行连接(例如,使用默认 TCP 端口 1433、命名管道的默认管道名称等)。 由于以后失败,可能会生成其他错误消息,但不会生成此错误消息。
解决方法
若要解决此问题,必须解决导致管理服务器与 SQL Server 群集之间的 UDP 端口通信失败的任何问题。 在大多数情况下,请按照以下步骤轻松隔离问题:
- 确保服务器名称正确(例如,请确保名称中没有错误)。
- 确保实例名称正确且实例实际存在于目标计算机上。 某些应用程序将 \\ 转换为 \。 如果不确定应用程序,请尝试在连接字符串中。
server\instance
server\\instance
- 确保服务器可访问。 确保可以正确解析 DNS,并且可以 ping 服务器。
- 确保 SQL Server Browser 服务在服务器上运行。
- 如果服务器上启用了防火墙,请确保sqlbrowser.exe和 UDP 端口 1434 有例外。
可以从 PortQry 版本 2.0 中的新增特性和功能下载PortQry
该实用工具,以测试步骤 4 和 5。
完成后 PortQry
,运行以下命令:
portqry.exe -n serverName -p UDP -e 1434
如果此命令返回信息并包含目标实例,则可以排除步骤 4 和 5 中的方案。 这意味着 SQL Browser 正在运行,防火墙不会阻止 SQL Server Browser UDP 数据包。
完成这些步骤后,错误不应再发生。 管理服务器可能仍然无法连接到 SQL Server,但如果如此,此时应触发其他错误消息。 如果管理服务器仍然无法连接,请替换为server\instance
tcp:server\instance
或替换为np:server\instance
,然后查看它是否成功使用 TCP 或 NP 协议。
详细信息
此问题由以下组合引起:
- Windows 群集细节
- 如何发现 SQL Server 命名实例
连接到 SQL Server 命名实例时,客户端组件依赖于 SQL Server Browser 来发现服务器及其参数。 发现进程按如下所示运行:
- 客户端将 UDP 数据包发送到目标计算机上的 SQL Server Browser。 当命名实例位于 Windows 群集上时,数据包将发送到群集 IP,或者更具体地说,发送到与运行 SQL Server 的虚拟机对应的 IP 地址。 但是,SQL Browser 无法识别群集,它侦听任何 IP。
- 当 SQL Server Browser 收到 UDP 请求数据包时,它会将响应 UDP 数据包发送回客户端。 尽管目标 IP 地址是客户端的 IP 地址,但源 IP 地址会更改。 它现在是物理计算机上网络适配器的 IP 地址,而不是虚拟 SQL Server IP 地址。
- 响应 UDP 数据包的源 IP 地址由 Windows OS 根据路由表确定。 由于虚拟 SQL Server IP 地址和附加到物理网络适配器的 IP 地址通常位于同一子网上,因此属于同一路由,因此会选择物理 IP 地址。 根据客户端和服务器计算机上的安全设置,此响应 UDP 数据包可能会由第三方防火墙或 IPsec 删除,因为对等 IP 地址已更改。 Windows 防火墙不会删除数据包。
- 如果客户端是基于 Windows Vista 的计算机,则如果客户端上启用了 IPsec 策略,并且无法建立客户端和服务器之间的信任连接,IPsec 可能会删除数据包。 若要解决此问题,请在连接字符串中手动指定 TCP 端口或管道名称。