尝试从 SSMS 2016 读取错误日志时,SQL Server 2016 代理无法启动或“未能检索数据”错误

本文列出了使用旧版 MS ODBC 13 驱动程序时 SSMS 中出现的各种问题,以及这些问题的解决方法。

原始产品版本: SQL Server 2016 开发人员
原始 KB 数: 3185365

现象

如果Microsoft SQL Server 2016 RTM 或 SQL Server 2016 RTM CU1 命名实例,则可能会遇到以下症状之一。

症状 1

SQL Server 代理日志文件显示如下所示的消息:

2016-08-06 14:54:41 - ! [000] 无法连接到服务器“servername\instancename”;SQLServerAgent 无法启动
2016-08-06 14:54:46 - ! [298] SQLServer 错误:
65535、SQL Server 网络接口:错误查找指定的服务器/实例
[xFFFFFFFF]。 [SQLSTATE 08001]
2016-08-06 14:54:46 - ! [165] ODBC 错误: 0,
登录超时已过期 [SQLSTATE HYT00]
2016-08-06 14:54:46 - ! [298]
SQLServer 错误:65535,建立与 SQL Server 的连接时发生了与网络相关的或特定于实例的错误。
找不到或无法访问服务器。
请检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 有关详细信息,请参阅 SQL Server 联机丛书。 [SQLSTATE 08001]

症状 2

尝试读取 SQL Server 错误日志时,尝试失败,并返回类似于以下内容的错误:

无法为此请求检索数据。 (Microsoft.SqlServer.Management.Sdk.Sfc)
执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)

此外,尝试执行xp_readerrorlog时,可能会触发以下错误:

Msg 22004,级别 16,状态 1,第 0 行
无法打开环回连接。 有关详细信息,请参阅事件日志。
Msg 22004,级别 16,状态 1,第 0 行
找不到错误日志位置。

症状 3

某些维护计划或 SQL 代理作业,例如用于删除旧备份或报告文件的维护清理任务“无提示”失败。 在清理任务的情况下,在运行相应作业时不会删除预期要删除的文件,并且不会将错误写入 SQL Server 日志。 执行 sp_readerrorlog 将导致症状 2。

原因

此问题是由 MS ODBC 13 驱动程序中的缺陷引起的。 SQL Server Management Studio(SSMS)和SQL Server 代理使用此驱动程序连接到 SQL Server 计算机。

解决方法

MS ODBC 13.1 驱动程序已修复此问题。