排除数据库引擎启动时出现的协议错误

当 SQL Server 数据库引擎在启动期间遇到与协议有关的错误时,错误消息将写入 SQL Server 错误日志和 Windows 事件日志,其格式如下:

“错误: 17182,严重性: 16,状态: 1。”

“TDSSNIClient 初始化失败,出现错误 <x>,状态代码 <y>。”

在上述消息中,<x> 是由通信子系统或安全子系统返回的基础错误代码,<y> 是 SQL Server 的内部协议错误状态。

注意注意

Shared Memory 协议和 Named Pipes 协议共享其实现中的某些方面。如果一个协议失败,则可能会导致另一个协议也失败。如果禁用了错误消息中声明的协议之后该错误依然存在,则请在禁用 Shared Memory 协议和 Named Pipes 协议的情况下尝试再次启动。

解释错误代码

基础错误代码 <x> 通常是指由 Windows 网络层或安全支持提供程序接口 (SSPI) 调用返回的错误代码。对于 Windows 网络错误代码,运行 net helpmsg 命令可以帮助解释该代码。SSPI 错误代码不容易解密。可能必须搜索 Microsoft 知识库,如果安装了操作系统 SDK,则检查 WinError.h 文件。

解释协议错误状态代码

下表中列出了 SQL Server 协议错误状态。注意,多数错误状态都指示一个内部错误条件,但是具体的值可以指明出现错误的特定协议区域。例如,如果值介于 7 和 30(0x0A 和 0x1E)之间,则错误源自 TCP/IP 处理。错误消息中的状态代码以十六进制格式表示。下表提供了等效的十进制以便更加清晰明了。

以十六进制格式表示的状态代码范围

以十进制格式表示的状态代码范围

协议区域

0x03

3

共享内存

0x07-0x1E

7-30

TCP/IP

0x1F-0x23

31-35

专用管理员连接 (DAC)

0x35

53

命名管道

0x36

54

虚拟接口适配器 (VIA)

0x38

56

安全套接字层 (SSL)

0x40-0x4F

64-79

共享内存

0x50-0x5F

80-95

命名管道

0x60-0x6F

96-111

VIA

0x70-0x7F

112-127

HTTP

0x80-0x8F

128-143

SSL

0x90-0x9F

144-159

常规

下表列出了某些常见的错误代码。

状态代码

说明

0x03

启动 Shared Memory 支持时出错

0x04

已禁用所有协议

0x0A

无法初始化 TCP/IP 侦听器

0x1C

服务器配置为侦听群集环境中的特定 IP 地址

0x1E

网络中检测到重复的 IP 地址

0x35

启动 Named Pipes 支持时出错

0x36

启动 VIA 支持时出错

0x38

获取或使用 SSL 证书时出错

0x3A

无法初始化通信侦听器

0x40

无法初始化 Shared Memory 侦听器

0x50

无法初始化 Named Pipes 侦听器

0x60

无法初始化 VIA 侦听器

0x70

无法初始化 HTTP 侦听器

0x80

无法初始化 SSL 支持

示例

以下是一个在启动期间发生的典型错误的示例:“TDSSNIClient 初始化失败,出现错误 0x80092004,状态代码 0x38。”

值 0x80092004 是翻译为 CRYPT_E_NOT_FOUND 的 SSPI 错误代码。0x38 是内部错误代码,表示 SQL Server 通信层无法初始化侦听器。该错误是 SSL 在无法找到证书的情况下生成的。

禁用所有协议时返回的错误

禁用了所有协议之后,可能出现下列错误:

  • “错误: 17182,严重性: 16,状态: 1。”

    “TDSSNIClient 初始化失败,出现错误 0xd,状态代码 0x4。”

  • “错误: 17182,严重性: 16,状态: 1。”

    “TDSSNIClient 初始化失败,出现错误 0xd,状态代码 0x1。”

  • “错误: 17826,严重性: 18,状态: 3。”

    “由于网络库中存在内部错误,所以无法启动网络库。若要确定原因,请查看错误日志中紧位于此错误之前的那些错误。”

  • “错误: 17120,严重性: 16,状态: 1。”

    “SQL Server 无法生成 FRunCM 线程。请查看 SQL Server 错误日志和 Windows 事件日志,以获取有关可能发生的相关问题的信息。”