与 SQL Server 建立连接时,出现网络相关或特定于实例的错误

适用范围:SQL Server

连接到 SQL Server 实例时,可能会遇到以下 一个或多个错误消息。 本文提供了一些步骤来帮助你排查这些错误,这些错误按从简单到复杂的顺序排列。

错误消息

完整的错误消息因应用程序和服务器环境中使用的客户端库而异。 可以查看以下详细信息,检查是否遇到以下错误消息之一:

提供程序:命名管道提供程序,错误:40 - 无法打开到 SQL Server 的连接(Microsoft SQL Server,错误: 53) 建立到 SQL Server 的连接时出现与网络相关或特定于实例的错误。 找不到或无法访问服务器。 请验证实例名称是否正确,SQL Server 是否已配置为允许远程连接。
提供程序:命名管道提供程序,错误:40 - 无法打开与 SQL Server 的连接(Microsoft SQL Server,错误:53)
提供程序:TCP 提供程序,错误:0 - 未知此类主机。 (Microsoft SQL Server,错误:11001)

提供程序:SQL 网络接口,错误:26 - 查找指定的服务器/实例时出错 建立到 SQL Server 的连接时出现与网络相关或特定于实例的错误。 找不到或无法访问服务器。 请验证实例名称是否正确,SQL Server 是否已配置为允许远程连接。
提供程序:SQL 网络接口,错误:26 - 查找指定的服务器/实例时出错

登录超时已过期 SQL Server Native Client 数据链接错误
[Microsoft SQL Server Native Client 10.0]:登录超时已过期
[Microsoft SQL Server Native Client 10.0]:与 SQL Server 建立连接时发生了与网络相关的或特定于实例的错误。 找不到或无法访问服务器。 请检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 有关详细信息,请参阅 SQL Server Books Online。
[Microsoft SQL Server Native Client 10.0]:SQL Server 网络接口:错误查找指定的服务器/实例 [xFFFFFFFF]。

连接尝试因所连接服务器在经过一段时间后未能正确响应而失败,或建立的连接因所连接主机未响应而失败 建立到 SQL Server 的连接时出现与网络相关或特定于实例的错误。 找不到或无法访问服务器。 请验证实例名称是否正确,SQL Server 是否已配置为允许远程连接。
提供程序:TCP 提供程序,错误:0
连接尝试因连接的服务器在经过一段时间后未能正确响应而失败,或建立的连接因连接的主机未响应而失败。
Microsoft SQL Server,错误:10060

provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接 建立到 SQL Server 的连接时出现与网络相关或特定于实例的错误。 找不到或无法访问服务器。 请验证实例名称是否正确,SQL Server 是否已配置为允许远程连接。
提供程序:命名管道提供程序,错误:40 - 无法打开与 SQL Server 的连接
Microsoft SQL Server,错误:53
找不到网络路径

[Microsoft][SQL Server Native Client 11.0]TCP 提供程序:无法建立连接,因为目标计算机主动拒绝连接 SQL Server Native Client 数据链接错误
[Microsoft][SQL Server Native Client 11.0] TCP 提供程序:无法建立连接,因为目标计算机主动拒绝了它。
[Microsoft][SQL Server Native Client 11.0] 登录超时已过期。
[Microsoft][SQL Server Native Client 11.0] 在与 SQL Server 建立连接时发生与网络相关或特定于实例的错误。 找不到或无法访问服务器。 请检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 有关详细信息,请参阅 SQL Server Books Online。

“SQL Server 不存在或访问被拒绝”

此错误通常意味着客户端无法找到 SQL Server 实例。 当存在至少一个以下问题时,就会出现此问题:

  • 托管 SQL Server 的计算机的名称错误。
  • 实例无法解析正确的 IP。
  • 未正确指定 TCP 端口号。

注意

若要排除高可用性场景中的连接问题,请参阅以下文章:

Windows 错误 233:管道的另一端没有进程

完整消息为:

已成功与服务器建立连接,但在登录过程中发生错误。 (提供程序: 共享内存提供程序,错误: 0 - 在管道的另一端没有进程。) (Microsoft SQL Server,错误: 233)

此消息表示 SQL Server 未侦听共享内存或命名管道协议。

收集用于排除错误的信息

建议先使用以下选项之一收集本节中列出的信息,然后再继续执行实际步骤来排查错误。

选项 1:使用 SQL Check 工具收集所需的信息

如果可以在本地登录到 SQL Server 计算机并具有管理员访问权限,请使用 SQLCHECK。 此工具在一个文件中提供进行故障排除所需的大部分信息。 查看该工具的主页,了解有关使用该工具及其收集的信息的详细说明。 还可以检查建议的先决条件和清单页。

选项 2:使用以下过程单独收集数据

从 Configuration Manager 获取实例名称

在托管 SQL Server 实例的服务器上,使用 SQL Server Configuration Manager 验证实例名称:

注意

安装 SQL Server 时,Configuration Manager 会自动安装到计算机上。 有关启动 Configuration Manager 的说明因 SQL Server 和 Windows 版本而略有不同。 有关特定于版本的详细信息,请参阅 SQL Server Configuration Manager

  1. 登录到托管 SQL Server 实例的计算机。

  2. 启动 SQL Server 配置管理器。

  3. 在左侧窗格中,选择“SQL Server Services”

  4. 在右窗格中,验证数据库引擎实例的名称。

    • SQL SERVER (MSSQLSERVER) 指示 SQL Server 的默认实例。 默认实例的名称是 <计算机名称>。
    • SQL SERVER (<实例名称>) 指示 SQL Server 的命名实例。 命名实例的名称是 <计算机名称>\<实例名称>。

获取服务器的 IP 地址。

可以使用以下步骤获取托管 SQL Server 实例的计算机的 IP 地址。

  1. 在“开始”菜单上,选择“运行”。 在“运行”窗口中,键入“cmd”,然后选择“确定”

  2. 在“命令提示符”窗口中,键入“ipconfig/all”,然后按 Enter。 记下 IPv4 地址和 IPv6 地址。

    注意

    SQL Server 可以使用 IP 版本 4 协议或 IP 版本 6 协议进行连接。 你的网络可能允许使用其中一种或同时使用这两种。

获取实例的 TCP 端口

在大多数情况下,你要使用 TCP 协议连接到另一台计算机上的数据库引擎。 要获取实例的 TCP 端口,请按照以下步骤操作:

  1. 在运行 SQL Server 的计算机上使用 SQL Server Management Studio 并连接到 SQL Server 实例。 在“对象资源管理器”中,展开“管理”,展开“SQL Server 日志”,然后双击当前日志。

  2. 在“日志文件查看器”中,选择工具栏上的“筛选器”。 在“消息包含文本”框中,键入“服务器正在侦听”,选择“应用筛选器”,然后选择“确定”

  3. 应列出一条消息,例如“服务器正在侦听 [ 'any' <ipv4> 1433]”。

    此消息指示 SQL Server 实例正在侦听此计算机上的所有 IP 地址(对于 IP 版本 4)和 TCP 端口 1433。 (TCP 端口 1433 通常是数据库引擎或 SQL Server 的默认实例使用的端口。只有一个 SQL Server 实例可以使用此端口。如果安装了多个 SQL Server 实例,则某些实例必须使用其他端口号。记下尝试连接到的 SQL Server 实例使用的端口号。

    注意

    • IP 地址 127.0.0.1 可能已列出。 它被称为环回适配器地址。 只有同一台计算机上的进程可以使用该 IP 地址进行连接。
    • 还可以使用文本编辑器查看 SQL Server 错误日志。 默认情况下,错误日志位于 Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOG 和 ERRORLOG.n 文件中。 有关详细信息,请参阅查看 SQL Server 错误日志

步骤 1:验证实例是否正在运行

选项 1:使用 SQLCHECK 输出文件

  1. 在 SQLCHECK 输出文件中搜索“SQL Server 信息”。
  2. 在标题为“感兴趣的服务”部分中,在“名称”和“实例”(命名实例)列下查找 SQL Server 实例,并使用“开始”列查看其状态。 如果值为 True,则启动服务。 否则,服务当前未运行。
  3. 如果服务未运行,请使用 SQL Server Management Studio、SQL Server Configuration Manager、PowerShell 或服务小程序启动服务。

选项 2:使用 SQL Server 配置管理器

要验证实例是否正在运行,请在“SQL Server 配置管理器”中选择“SQL Server 服务”,然后由 SQL Server 实例检查该符号。

  • 绿色箭头指示实例正在运行。
  • 红色方块指示实例已停止。

如果实例已停止,请右键单击该实例,然后选择“启动”。 然后,服务器实例启动,指示器变成绿色箭头。

选项 3:使用 PowerShell 命令

可以在 PowerShell 中使用以下命令检查系统上 SQL Server 服务的状态:

Get-Service | Where {$_.status -eq 'running' -and $_.DisplayName -like "sql server*"}

可以使用以下命令搜索特定字符串“SQL Server 现已准备好进行客户端连接”的错误日志文件。 这是一条信息性消息;无需执行任何用户操作。”:

Get-ChildItem -Path "c:\program files\microsoft sql server\mssql*" -Recurse -Include Errorlog | Select-String "SQL Server is now ready for client connections."

步骤 2:验证 SQL Server 浏览器服务是否正在运行

注意

此步骤仅用于对命名实例的连接问题进行疑难解答。

选项 1:使用 SQLCHECK 输出文件

  1. 在 SQLCHECK 输出文件中搜索“SQL Server 信息”。
  2. 在标题为“感兴趣的服务”部分中,在“名称”列中搜索 SQLBrowser,并使用“已启动”列查看其状态。 如果值为 True,则服务已启动。 否则,服务当前未运行,需要启动它。 有关详细信息,请参阅启动、停止、暂停、恢复、重启 SQL Server 服务

选项 2:使用 SQL Server 配置管理器

要连接到命名实例,SQL Server 浏览器服务必须正在运行。 在“SQL Server 配置管理器”中,找到“SQL Server浏览器”服务并验证它是否正在运行。 如果它未运行,请启动该服务。 默认实例不需要 SQL Server 浏览器服务。

有关在环境中使用 SQL Server 浏览器服务的详细信息,请参阅 SQL Server 浏览器服务

有关停止和启动 SQL Services 的详细信息,请参阅启动、停止、暂停、恢复、重启 SQL Server 服务

注意

如果无法在环境中运行 SQL Server 浏览器服务,请参阅在不使用 SQL Server 浏览器服务的情况下连接到 SQL Server 命名实例

步骤 3:验证连接字符串中的服务器名称

在连接字符串中指定错误的服务器名称时,通常会遇到错误。 确保服务器名称与前面步骤中检索到的服务器名称匹配。

注意

如果使用 SQLCHECK 工具,请查看输出文件的“计算机信息”部分中的 NetBios 名称/FQDN

步骤 4:验证客户端计算机上的别名

当使用备用名称连接到 SQL Server 或网络中存在名称解析问题时,通常会在客户端环境中使用别名。 它们是使用 SQL Server 配置管理器客户端网络实用工具创建的。 不正确的别名可能导致应用程序连接到错误的服务器,从而导致失败。 请按照以下方法检查不正确的别名。 还可以使用工具,例如客户端计算机上的(SQLCHECK)检查客户端计算机上的别名和各种其他连接相关设置。

注意

以下选项仅适用于使用 SQL Server Native Client 连接到 SQL Server 的应用程序。

选项 1:使用 SQLCHECK 输出文件

  1. 在 SQLCHECK 输出文件中,搜索字符串 SQL 别名。 (此字符串将包含在文件的客户端安全和驱动程序信息部分)
  2. 查看表中的条目。 如果不存在,则计算机上没有别名。 如果有条目,请查看信息以确保服务器名称和端口号设置为正确的值。

示例输出:
SQL 别名:

Alias Name   Protocol   Server Name     Port   32-bit 

----------   --------   ------------    ----   ------ 

prodsql      TCP        prod_sqlserver  1430      

输出指示 prodsql 它是在 prod_sqlserver 端口 1430 上运行的 SQL Server 的别名。

选项 2:检查 SQL Server 配置管理器中的别名

  1. 在“SQL Server 配置管理器”中,展开“SQL Server Native Client 配置”,然后选择“别名”

  2. 检查尝试连接到的服务器是否定义了任何别名。

    如果存在别名,请执行以下步骤:

    1. 打开别名的“属性”窗格。
    2. 重命名“别名”字段中的值(例如,如果服务器名称为 MySQL,请将其重命名为 MySQL_test)并重试连接。 如果可以连接,则别名不正确,可能来自不再需要的旧配置。 如果不能连接,请将别名重命名回其原始名称,然后转到下一步。
    3. 检查别名的连接参数,并确保它们是正确的。 以下常见方案可能会导致连接问题:
      • “服务器”字段的 IP 地址不正确。 确保 IP 地址与 SQL Server 错误日志文件中的条目匹配。
      • “服务器”字段中的服务器名称不正确。 例如,服务器别名指向正确的服务器名称。 但是,如果服务器名称参数的值不正确,连接将失败。
      • 管道名称格式不正确(如果使用命名管道别名)。
        • 连接到名为 Mydefaultinstance 的默认实例时,管道名称应为 \\Mydefaultinstance\pipe\sql\query
        • 连接到命名实例 MySQL\Named 时,管道名称应为 \\MySQL\pipe\MSSQL$Named\sql\query

选项 3:检查 SQL Server 客户端网络实用工具中的别名

  1. 通过在 Run 命令中键入cliconfg.exe来打开 SQL Server 客户端网络实用工具
  2. 按照选项 2 中的步骤 2:检查 SQL Server 配置管理器中的别名

步骤 5:验证防火墙配置

可以根据默认实例或命名实例验证防火墙配置。

注意

如果在网络中使用第三方防火墙,这些概念仍然适用。 但是,你可能必须与网络管理员合作,或查阅防火墙产品的文档,以获取有关配置防火墙以允许与 SQL Server 通信所需的端口的详细信息。

SQL Server 的默认实例

默认实例通常在端口 1433 上运行。 某些安装还使用非标准端口(除 1433)来运行 SQL 实例。 防火墙可能会阻止任一端口。 要进一步检查端口号,请执行以下步骤:

  1. 确定 SQL 实例正在运行的端口,请参阅获取实例的 TCP 端口
    • 如果 SQL Server 配置为在端口 1433 侦听,请确保客户端和服务器之间的网络防火墙允许该端口上的通信。 查看配置数据库引擎访问 Windows 防火墙,并与网络管理员协作以实施必要的解决方案。
    • 如果 SQL Server 默认实例未使用 1433,请尝试使用格式<servername>,<portnumber>将 SQL Server 的端口号追加到服务器名称,并查看其是否工作正常。 例如,SQL 实例名称为 MySQLDefaultinstance,它在端口 2000 上运行。 将服务器名称指定为 MySQLServer 2000,并查看它是否工作正常。
      • 如果工作不正常,则表示防火墙正在阻止端口。 可以按照配置数据库引擎访问 Windows 防火墙中的说明进行操作,或与网络管理员协作将端口添加到防火墙排除列表。
      • 如果工作正常,则表示防火墙允许通过该端口进行通信。 需要更改连接字符串才能在应用程序的连接字符串中使用端口号和服务器名称。

SQL Server 的命名实例

如果 SQL 实例是命名实例,则可以将其配置为使用动态端口或静态端口。 在任一情况下,基础网络库通过 UDP 端口 1434 查询 SQL Server 计算机上运行的 SQL Server Browser 服务,以枚举命名实例的端口号。 如果客户端和服务器之间的防火墙阻止了此 UDP 端口,则客户端库无法确定端口(连接要求)并且连接会失败。 要检查连接,可以使用下列方法:

  • 方法 1:通过在连接字符串中指定端口号来检查连接。

    1. 确定 SQL 实例正在运行的端口,请参阅获取实例的 TCP 端口
    2. 尝试使用以格式 <servername\instancename>,<portnumber> 追加到服务器名称的端口号连接到命名实例,并查看是否可行。 例如,如果 SQL 实例名称为 MySQL\Namedinstance ,并且它在端口 3000 上运行,则将服务器名称指定为 MySQL\Namedinstance,3000
      • 如果确实可行,则指示防火墙在阻止 UDP 端口 1434,或者实例在 SQL Server 浏览器中隐藏
      • 如果不起作用,则表示以下情况之一:
        • UDP 端口 1434 被阻止或静态端口被阻止,或两者均被阻止。 要确认是 UDP 端口还是静态端口,请使用 Portqry
        • 该实例在 SQL Server Browser 服务中是隐藏的。
  • 方法 2:使用 PortQryUI 工具检查连接。

    将 PortQryUI 工具与命名实例配合使用,并观察生成的输出。 可能会看到一条指示 UDP 端口 1434 已筛选的消息。 此消息指示该端口在网络上被阻止。 有关如何使用该工具的说明,请参阅将 PortQryUI 工具与 SQL Server 配合使用

    确定 SQL Server 实例是在侦听动态端口还是静态端口。 然后使用以下与方案相关的方法。 如果不确定,请参阅如何检查 SQL Server 正在侦听动态端口还是静态端口

    • 方案 1:动态端口。 在这种情况下,请确保 SQL Server 浏览器服务已启动,并且不会在客户端和服务器之间的防火墙上阻止 UDP 端口 1434。 如果不能执行上述任一操作,应将 SQL Server 实例切换到静态端口,并使用配置服务器以侦听特定 TCP 端口中所述的过程。
    • 方案 2:静态端口配置。 SQL Server 浏览器未运行,或者无法在防火墙上打开 UDP 1434。 在这种情况下,请确保在连接字符串中指定静态端口,并且防火墙不会阻止端口。 有关详细信息,请查看为数据库引擎访问配置 Windows 防火墙

步骤 6:在 SQL Server 上验证已启用的协议

在某些 SQL Server 安装中,除非管理员手动启用从另一台计算机到数据库引擎的连接,否则不会启用这些连接。 可以使用以下选项来检查和启用必要的协议,以允许远程连接到 SQL Server 数据库引擎。

选项 1:使用 SQLCHECK 输出文件

  1. 在 SQLCHECK 输出文件中搜索“SQL Server 实例的详细信息”部分,并找到 SQL Server 实例的信息部分。

  2. 在本部分中,查找下表中列出的值,以确定是否启用了 SQL Server 协议:

    值名称 意义 详细信息
    已启用共享内存 可以是 true 或者 false - 仅影响本地连接。 使用 Shared Memory 协议创建有效的连接字符串
    已启用命名管道 如果为 false,则使用命名管道的本地连接和远程连接都将失败 选择网络协议
    已启用 TCP 如果为 false,则使用 TCP/IP 的本地连接和远程连接都将失败。
    备注大多数 SQL Server 安装使用 TCP/IP 作为服务器与客户端之间的通信协议。
    选择网络协议
  3. 使用 SQL Server 配置管理器 或 SQL Server PowerShell 启用所需的协议。 有关详细信息,请参阅 启用或禁用服务器网络协议

    注意

    启用协议后,必须停止并重启数据库引擎,才能使更改生效。

选项 2:使用 SQL Server 配置管理器

要使用 SQL Server 配置管理器从另一台计算机启用连接,请执行以下步骤:

  1. 打开“SQL Server 配置管理器”。
  2. 在左窗格中,展开“SQL Server 网络配置”,然后选择要连接到的 SQL Server 实例。 右窗格列出了可用的连接协议。 共享内存通常已启用。 它只能从同一台计算机使用,因此大多数安装都启用了共享内存。 若要从另一台计算机连接到 SQL Server,请使用 TCP/IP。 如果未启用 TCP/IP,请右键单击“TCP/IP”,然后选择“启用”
  3. 如果更改任何协议的启用设置,请重启数据库引擎。 在左侧窗格中,选择“SQL Server Services”。 在右窗格中,右键单击数据库引擎的实例,然后选择“属性”

步骤 7:测试 TCP/IP 连接

使用 TCP/IP 连接到 SQL Server 需要 Windows 建立连接。 可以使用以下步骤通过 ping 工具测试 TCP 连接。

  1. 在“开始”菜单上,选择“运行”。 在“运行”窗口中,键入“regedit”,然后选择“确定”
  2. 在“命令提示符”窗口中,键入ping和运行 SQL Server 的计算机的 IP 地址。 例如:
    • IPv4:ping 192.168.1.101
    • IPv6:ping fe80::d51d:5ab5:6f09:8f48%11
  3. 如果网络配置正确,则ping会返回Reply from <IP address>,之后会收到一些其他信息。 如果ping返回Destination host unreachableRequest timed out,代表未正确配置 TCP/IP。 此时的错误表明客户端计算机、服务器计算机或网络的某些部分(如路由器)出现问题。 若要排查网络问题,请参阅 TCP/IP 问题的高级故障排除
  4. 如果使用 IP 地址ping测试成功,请测试计算机名称是否可以解析为 TCP/IP 地址。 在客户端计算机上的“命令提示符”窗口中,键入“ping” 和运行 SQL Server 的计算机的名称。 例如,ping newofficepc
  5. 如果 ping 到 IP 地址成功,但 ping 到计算机名称返回Destination host unreachable或者Request timed out,你可能在客户端计算机上缓存了旧的(过时)名称解析信息。 键入ipconfig /flushdns以清除 DNS(动态名称解析)缓存。 然后再次按名称 ping 计算机。 当 DNS 缓存为空时,客户端计算机会检查有关服务器计算机 IP 地址的最新信息。
  6. 如果网络配置正确,则ping会返回Reply from <IP address>,之后会收到一些其他信息。 如果可以按 IP 地址成功 ping 服务器计算机,但在按计算机名称 ping 时收到错误(例如Destination host unreachable或者Request timed out),则名称解析未正确配置。 有关详细信息,请参阅如何排查基本 TCP/IP 问题。 连接到 SQL Server 不需要成功名称解析。 但是,如果计算机名称无法解析为 IP 地址,则必须建立连接才能指定 IP 地址。 以后可以修复名称解析。

注意

还可以使用 Test-NetConnectionTest-Connection cmdlet,根据计算机上安装的 PowerShell 版本测试 TCP 连接。 有关 PowerShell cmdlet 的更多信息,请参阅 Cmdlet 概述

步骤 8:测试本地连接

在排查另一台计算机的连接问题之前,请在运行 SQL Server 的计算机上测试本地安装的客户端应用程序的连接能力。 本地连接可避免网络和防火墙问题。

此过程需要 SQL Server Management Studio。 如果尚未安装 Management Studio,请参阅下载 SQL Server Management Studio (SSMS)

如果无法安装 Management Studio,可以使用 sqlcmd.exe 实用工具测试连接。 sqlcmd.exe 随数据库引擎一起安装。 有关 sqlcmd.exe的信息,请参阅 sqlcmd 实用工具

  1. 使用可以访问 SQL Server 的登录名登录到安装 SQL Server 的计算机。 在安装过程中,SQL Server 需要至少指定一个登录名作为 SQL Server 管理员。 如果你不知道管理员,请参阅系统管理员被锁定时连接到 SQL Server

  2. 在“开始”页上,键入“SQL Server Management Studio”,或在 Windows 旧版本中的“开始”菜单上,选择“所有程序”,选择“Microsoft SQL Server”,然后选择“SQL Server Management Studio”

  3. 在“连接”下拉菜单上,选择“数据库引擎”。 在“身份验证”框中,选择“Windows 身份验证”。 在“服务器名称”框中,键入以下连接类型之一:

    连接到 类型 示例
    默认实例 <computer name> ACCNT27
    命名实例 <computer name\instance name> ACCNT27\PAYROLL

    注意

    在同一台计算机上从客户端应用程序连接到 SQL Server 时,将使用共享内存协议。 共享内存是本地命名管道的一种类型,因此有时会遇到与管道相关的错误。

  4. 如果此时收到错误,则必须在继续操作之前解决该错误。 你的登录名可能无权连接。 默认数据库可能缺失。

    注意

    如果没有足够的信息,就无法解决问题,因为某些错误消息是有意传递给客户端的。 这是一项安全功能,可避免向攻击者提供有关 SQL Server 的信息。 要查看有关错误的详细信息,请参阅 SQL Server 错误日志。

  5. 如果收到错误 18456 用户登录失败,则联机丛书文章 MSSQLSERVER_18456 包含有关错误代码的其他信息。 Aaron Bertrand 的博客还在排查错误 18456(外部链接)中提供了大量的错误代码列表。 可以使用 SSMS 在“对象资源管理器”的“管理”部分查看错误日志(如果可以连接)。 否则,可以使用 Windows 记事本程序查看错误日志。 默认位置因版本而异,并且可以在设置过程中更改。 SQL Server 2019 (15.x) 的默认位置是 C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log\ERRORLOG

  6. 如果可以使用共享内存进行连接,请使用 TCP 测试连接。 可以通过在名称之前指定 tcp: 来强制建立 TCP 连接。 下面是示例:

    连接到: 类型: 示例:
    默认实例 tcp:<computer name> tcp:ACCNT27
    命名实例 tcp:<computer name/instance name> tcp:ACCNT27\PAYROLL
  7. 如果可以使用共享内存而不是 TCP 进行连接,则必须修复 TCP 问题。 最有可能的问题是 TCP 未启用。 要启用 TCP,请参阅步骤 6:在 SQL Server 上验证已启用的协议

  8. 如果目标是使用管理员帐户以外的帐户进行连接,则可以首先以管理员身份进行连接。 然后,尝试使用客户端应用程序使用的 Windows 身份验证登录或 SQL Server 身份验证登录再次连接。

步骤 9:测试远程连接

在同一台计算机上使用 TCP 进行连接后,即可尝试从客户端计算机进行连接。 可以使用任何客户端应用程序,但为了避免太复杂,请在客户端上安装 SQL Server 管理工具。 安装后,尝试使用 SQL Server Management Studio。

  1. 在客户端计算机上使用 SQL Server Management Studio,并尝试使用 IP 地址和格式为 IP 地址逗号端口号的 TCP 端口号进行连接。 例如,192.168.1.101,1433。 如果此连接失败,则可能遇到以下问题之一:
    • IP 地址的 ping 不起作用。 这指示常规 TCP 配置问题。 返回到“步骤 7:测试 TCP/IP 连接性”部分。
    • SQL Server 未侦听 TCP 协议。 返回到“步骤 6:验证 SQL Server上已启用的协议”部分。
    • SQL Server 正在侦听指定端口以外的端口。 返回到“获取 TCP 端口”部分。
    • 防火墙正在阻止 SQL Server TCP 端口。 返回到“步骤 5:验证防火墙配置”部分。
  2. 使用 IP 地址和端口号进行连接后,请查看以下方案:
    • 如果连接到侦听除 1433 以外的任何端口的默认实例,则必须使用连接字符串中的端口号或在客户端计算机上创建别名才能连接到默认实例。 SQL Server 浏览器服务无法枚举默认实例的端口。
    • 如果连接到命名实例,请尝试以 IP 地址反斜杠实例名称格式连接到实例。 (例如,192.168.1.101\<instance name>。)如果此操作不起作用,则表示端口号不会返回到客户端。 此问题与 SQL Server Browser 服务相关,该服务为客户端提供命名实例的端口号。 下面是解决方案:
      • 启动 SQL Server Browser 服务。 请参阅有关在 SQL Server 配置管理器中启动浏览器的说明。
      • 防火墙正在阻止 SQL Server Browser 服务。 在防火墙中打开 UDP 端口 1434。 返回到步骤 5 部分:验证防火墙配置。 请确保打开的是 UDP 端口,而不是 TCP 端口。
      • 路由器正在阻止 UDP 端口 1434 信息。 UDP 通信(用户数据报协议)不是为了通过路由器并防止网络被低优先级流量占据而设计的。 可以将路由器配置为转发 UDP 流量,也可以在每次连接时提供端口号。
      • 如果客户端计算机使用 Windows 7、Windows Server 2008 或较新的操作系统,则客户端操作系统可能会删除 UDP 流量,因为来自服务器的响应是从查询的不同 IP 地址返回的。 此操作是阻止“松散源映射”的安全功能。有关详细信息,请参阅联机丛书中的“多服务器 IP 地址”部分故障排除:超时已过期。 (本文来自 SQL Server 2008 R2,但主体仍适用。可以将客户端配置为使用正确的 IP 地址,或在每次连接时提供端口号。
  3. 使用 IP 地址(或命名实例的 IP 地址和实例名称)连接后,请尝试使用计算机名称(或命名实例的计算机名称和实例名称)进行连接。 计算机名称前输入tcp:以强制 TCP/IP 连接。 例如,对于名为 ACCNT27 的计算机上的默认实例,请使用 tcp:ACCNT27。 对于名为 PAYROLL 的命名实例,请在该计算机上使用 tcp:ACCNT27\PAYROLL。 如果可以使用 IP 地址连接,但不能使用计算机名称连接,则是出现了名称解析问题。 返回到“步骤 7:测试 TCP/IP 连接性”部分。
  4. 使用计算机名称强制 TCP 连接后,请尝试使用计算机名称进行连接,而不强制使用 TCP。 例如,对于默认实例,只需使用计算机名称,如 CCNT27。 对于命名实例,请使用计算机名称和实例名称,如 ACCNT27\PAYROLL。 如果可以在强制 TCP 时连接,但不强制 TCP 时无法连接,则客户端可能正在使用其他协议(如 命名管道)。 若要解决此问题,请执行以下步骤:
    1. 在客户端计算机上,使用 SQL Server 配置管理器。 在左窗格中,展开 “SQL Native Client <版本> 配置”,然后选择“ 客户端协议”。
    2. 在右窗格中,确保已启用“TCP/IP”。 如果禁用“TCP/IP”,请右键单击“TCP/IP”并选择“启用”
    3. 请确保 TCP/IP 的协议顺序比命名管道(或旧版本中的 VIA)协议的号码小。 通常,应将共享内存设置为顺序 1,将 TCP/IP 设置为顺序 2。 仅当客户端和 SQL Server 在同一台计算机上运行时,才使用共享内存。 所有启用的协议都会按顺序进行尝试,直到成功,但当连接不在同一台计算机上时,将跳过共享内存。

步骤 10:检查用户权限

如果使用命名管道进行连接,请检查用户是否有权登录到 Windows。 有关详细信息,请参阅 排查命名管道连接问题

另请参阅