排除数据库引擎启动时出现的协议错误
当 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 事件日志,以获取有关可能发生的相关问题的信息。”