排查 SQL Server 实用工具故障

排查 SQL Server 实用工具问题可能包括解决将 SQL Server 实例注册到 UCP 失败的操作、排查导致 UCP 上托管实例列表视图中出现灰色图标的数据收集失败问题、缓解性能瓶颈或解决资源运行状况问题。 有关缓解 SQL Server UCP 标识的资源运行状况问题的详细信息,请参阅 SQL Server 资源运行状况疑难解答(SQL Server 实用工具)。

将 SQL Server 实例加入 SQL Server 实用工具的操作失败

如果连接到 SQL Server 实例以使用 SQL Server 身份验证进行注册,并且指定属于与 UCP 所在的域不同的 Active Directory 域的代理帐户,则实例验证成功,但注册作失败并显示以下错误消息:

执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)

其他信息:无法获取有关 Windows NT 组/用户“<DomainName\AccountName>”的信息,错误代码0x5。 (Microsoft SQL Server,错误:15404)

在以下示例方案中出现此问题:

  1. UCP 是“Domain_1”的成员。

  2. 已建立单向域信任关系:即“Domain_1”不受“Domain_2”信任,但“Domain_2”由“Domain_1”信任。

  3. 要注册到 SQL Server 实用工具的 SQL Server 实例也是“Domain_1”的成员。

  4. 在注册操作期间,连接到 SQL Server 实例,并使用“sa”账号进行注册。 从“Domain_2”指定代理帐户。

  5. 验证成功,但注册失败。

此问题的解决方法是,使用上面的示例连接到 SQL Server 实例,以使用“sa”注册到 SQL Server 实用工具,并提供来自“Domain_1”的代理帐户。

WMI 验证失败

如果在 SQL Server 实例上未正确配置 WMI,那么在创建 UCP 操作和注册托管实例操作时会显示警告,但这些操作不会被阻止。 此外,如果更改 SQL Server 代理帐户配置,以便 SQL Server 代理无权访问所需的 WMI 类,则 SQL Server 受影响托管实例上的数据收集无法上传到 UCP。 这会导致 UCP 中的灰色图标。

失败的数据收集会导致 SQL Server 受影响托管实例的 UCP 列表视图中的灰色状态图标。 SQL Server 托管实例上的作业历史记录显示,sysutility_mi_collect_and_upload 在步骤 2(通过 PowerShell 脚本收集阶段数据)失败。

简化的错误消息包括:

命令执行已停止,因为 shell 变量“ErrorActionPreference”设置为 Stop:Access 被拒绝。

错误: <日期时间(MM/DD/YYYY HH:MM:SS)>:收集 CPU 属性时捕获异常。 WMI 查询可能已失败。 警告。

若要解决此问题,请验证以下配置设置:

  • 在 Windows Server 2003 上,SQL Server 代理服务必须是 SQL Server 托管实例上的 Windows 性能监视组的一部分。

  • 必须在 SQL Server 的托管实例上启用和配置 WMI 服务。

  • WMI 存储库可能在 SQL Server 的托管实例上损坏。

  • SQL Server 托管实例上的性能库可能缺失或损坏。

若要验证 SQL Server 的指定实例是否已正确配置为向 UCP 报告数据,请验证 SQL Server 的指定实例上是否提供以下类,以及它们是否可供 SQL Server 代理服务帐户访问:

  • Win32_MountPoint

  • Win32_PerfRawData_PerfProc_Process

  • Win32_PerfRawData_PerfOS_Processor

  • Win32_Processor

  • Win32_Volume

  • Win32_LogicalDisk

可以在每个类上使用 Get-WmiObject PowerShell cmdlet 来验证每个类是否可访问。 在 SQL Server 的托管实例上运行以下 cmdlet:

Get-WmiObject Win32_MountPoint -ErrorAction Stop | Out-Null  
Get-WmiObject Win32_PerfRawData_PerfProc_Process -ErrorAction Stop| Out-Null  
Get-WmiObject Win32_PerfRawData_PerfOS_Processor -ErrorAction Stop | Out-Null  
Get-WmiObject Win32_Processor -ErrorAction Stop | Out-Null  
Get-WmiObject Win32_Volume -ErrorAction Stop | Out-Null  
Get-WmiObject Win32_LogicalDisk -ErrorAction Stop | Out-Null  

有关 WMI 故障排除的详细信息,请参阅 WMI 故障排除。 请注意,这些 SQL Server 实用工具作中的查询在本地运行,因此 DCOM 和远程故障排除内容不适用。

失败的数据收集

如果 SQL Server 实用工具数据收集事件失败,请考虑以下可能性:

  • 请勿更改 SQL Server 托管实例上“实用工具信息”集合集的任何属性,也不会手动打开/关闭数据收集,因为数据收集由实用工具代理作业控制。

  • WMI 验证失败或不受支持。 有关详细信息,请参阅本主题前面的“失败的 WMI 验证”部分。

  • 刷新托管实例列表视图中的数据,因为 SQL Server 实用工具视图中的数据不会自动刷新。 若要刷新数据,请在“实用工具资源管理器导航”窗格中右键单击“托管实例”节点,然后选择“刷新”,或在列表视图中右键单击 SQL Server 实例名称,然后选择“刷新”。 请注意,在向 UCP 注册 SQL Server 实例后,数据可能需要长达 30 分钟的时间才能首先显示在仪表板和实用工具资源管理器内容窗格中的视点中。

  • 使用 SQL Server 配置管理器验证 SQL Server 实例是否正在运行。

  • 如果数据收集或数据上传由于超时问题而失败,请更新 MSDB 数据库中的函数dbo.fn_sysutility_mi_get_collect_script()。 具体而言,在函数“Invoke-BulkCopyCommand()”中添加行:

    $bulkCopy.BulkCopyTimeout=180  
    

    默认超时值为 30 秒。

  • 如果未群集化 SQL Server 实例,请验证 SQL Server 代理服务是否正在运行,并且该服务已设置为在 UCP 和 SQL Server 的托管实例上自动启动。

  • 验证是否正在使用有效的帐户在 SQL Server 的托管实例上运行数据收集。 例如,密码可能已过期。 如果代理密码已过期,请更新 SSMS 中的密码凭据,如下所示:

    1. 在 SSMS 对象资源管理器中,展开 “安全 ”节点,然后展开 “凭据” 节点。

    2. 右键单击 UtilityAgentProxyCredential_<GUID> 并选择“ 属性”。

    3. 在“凭据属性”对话框中,根据需要更新 UtilityAgentProxyCredential_<GUID> 的凭据。

    4. 单击“确定”确认更改。

  • 应在 UCP 和 SQL Server 的托管实例上启用 TCP/IP。 通过 SQL Server 配置管理器启用 TCP/IP。

  • UCP 上的 SQL Server Browser 服务应启动并配置为自动启动。 如果组织阻止使用 SQL Server 浏览器服务,请使用以下步骤允许 SQL Server 的托管实例连接到 UCP:

    1. 在 SQL Server 托管实例上的 Windows 任务栏上,单击“ 开始”,然后单击“ 运行...”

    2. 在提供的空间中键入“cliconfg.exe”,然后单击“ 确定”。

    3. 如果系统提示允许“SQL 客户端配置实用工具 EXE”启动,请单击“继续”。

    4. “SQL Server 客户端网络实用工具 ”对话框中,选择“ 别名 ”选项卡,然后单击“ 添加...”

    5. 在“ 添加网络库配置 ”对话框中:

    6. 从网络库列表中指定 TCP/IP。

    7. “服务器别名 ”文本框中指定 UCP 的 ComputerName\InstanceName。

    8. “服务器名称” 文本框中输入 UCP 的计算机名称。

    9. 取消选中 “动态确定端口 ”复选框。

    10. 端口号 文本框中指定 UCP 侦听的端口号。

    11. 单击“确定”以保存你的更改。

    12. 对连接到未启用 SQL Server 浏览器服务的 UCP 的每个 SQL Server 托管实例重复这些步骤。

  • 确保 SQL Server 的托管实例已连接到网络。

  • 如果 SQL Server 的托管实例上存在名称相同但区分大小写设置不同的数据库,则数据库与其观点之间的标识可能不正确,从而导致数据收集失败。 例如,名为“MYDATABASE”的数据库可能会显示名为“MyDatabase”的数据库的运行状况。 在这种情况下,不会生成任何错误。 数据收集失败也可能是由于在 UCP 中显示的其他对象(例如数据库文件和文件组名称)中的大小写不匹配所导致的。

  • 如果 SQL Server 的托管实例托管在 Windows Server 2003 计算机上,则 SQL Server 代理服务帐户必须属于性能监视器用户安全组或本地管理员组。 否则,数据收集将失败,并出现访问被拒绝错误。 若要将 SQL Server 代理服务帐户添加到性能监视器用户安全组,请使用以下步骤:

    1. 打开 计算机管理,然后 打开本地用户和组,然后 打开组

    2. 右键单击 “性能监视器用户 ”,然后选择“ 添加到组”。

    3. 单击 添加

    4. 输入运行 SQL Server 代理服务的帐户,然后单击“ 确定”。

    5. 如果在将用户添加到此组之前已向 UCP 注册了 SQL Server 实例,请重启 SQL Server 代理服务。

另请参阅

SQL Server 实用工具功能和任务
排查 SQL Server 资源运行状况问题 (SQL Server 实用工具)