建立与 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]: Login timeout expired
[Microsoft SQL Server Native Client 10.0]: A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
[Microsoft SQL Server Native Client 10.0]: SQL Server Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF].

连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接的主机无法响应而建立的连接失败 建立与SQL Server的连接时,发生了与网络相关或特定于实例的错误。 找不到或无法访问服务器。 验证实例名称是否正确,以及是否将SQL Server配置为允许远程连接。
提供程序:TCP 提供程序,错误: 0
连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接的主机无法响应而建立的连接失败。
Microsoft SQL Server,错误:10060

提供程序:命名管道提供程序,错误: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联机丛书。

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

此错误通常意味着客户端找不到SQL Server实例。 如果至少存在以下问题之一,则会出现此问题:

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

备注

若要排查高可用性方案中的连接问题,请参阅以下文章:

收集有关排查错误的信息

建议使用以下选项之一收集本部分中列出的信息,然后继续执行解决错误的实际步骤。

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

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

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

从Configuration Manager获取实例名称

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

备注

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

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

  2. 开始SQL Server 配置管理器。

  3. 在左窗格中,选择 SQL Server服务

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

    • SQL SERVER (MSSQLSERVER) 指示SQL Server的默认实例。 默认实例的名称是 <computer name>。
    • SQL SERVER (<instance name>) 指示SQL Server的命名实例。 命名实例的名称为 <computer name>\<instance name>.

获取服务器的 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\ERRORLOGERRORLOG.n 文件中。 有关详细信息,请参阅查看SQL Server错误日志

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

选项 1:使用 SQLCheck 工具中的输出文件

  1. 在 SQLCheck 文件中搜索输出以获取“SQL Server信息”。

  2. 在标题为“感兴趣的服务”的部分中,在 名称和****实例 (下查找) 列的命名实例的SQL Server实例,并使用 “开始”列检查其状态。 如果值为 True,则启动服务。 否则,服务当前未运行。

  3. 如果服务未运行,请使用SQL Server管理工作室、SQL Server Configuration Manager、PowerShell 或 Services applet 启动服务。

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

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

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

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

选项 3:使用 PowerShell 命令

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

Get-Service | Where {$_.status -eq 'running' -and $_.DisplayName -match "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端口 1430 上运行的调用prod_sqlserver的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浏览器服务,以枚举命名实例的端口号。 如果客户端和服务器之间的防火墙阻止了此 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浏览器服务中隐藏

  • 方法 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 - 仅影响本地连接。 使用共享内存协议创建有效的连接字符串
    已启用命名管道 如果为 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服务。 在右窗格中,右键单击数据库引擎的实例,然后选择 “重启”。

步骤 7:测试 TCP/IP 连接

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

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

  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. ping如果使用 IP 地址测试成功,请测试计算机名称是否可以解析为 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 服务器计算机,但收到错误(例如 Destination host unreachable ,或者 Request timed out 按计算机名称 ping 时),则名称解析未正确配置。 有关详细信息,请参阅如何 排查基本 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 登录失败,则 Books Online 文章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。 如果此连接失败,你可能存在以下问题之一:

  2. 使用 IP 地址和端口号进行连接后,请查看以下方案:

    • 如果连接到侦听除 1433 以外的任何端口的默认实例,则必须使用连接字符串中的端口号或在客户端计算机上创建别名才能连接到默认实例。 SQL Server浏览器服务无法枚举默认实例的端口。

    • 如果连接到命名实例,请尝试以 IP 地址反斜杠实例名称格式连接到实例。 (例如. 192.168.1.101\<instance name>) 如果此操作不起作用,则表示端口号不会返回到客户端。 此问题与SQL Server浏览器服务相关,后者为客户端提供命名实例的端口号。 下面是解决方案:

      • 启动SQL Server浏览器服务。 请参阅有关在SQL Server 配置管理器中启动浏览器的说明。
      • 防火墙正在阻止SQL Server浏览器服务。 在防火墙中打开 UDP 端口 1434。 返回到步骤 5 部分:验证防火墙配置。 请确保打开的是 UDP 端口,而不是 TCP 端口。
      • 路由器正在阻止 UDP 端口 1434 信息。 UDP 通信 (用户数据报协议) 不设计用于通过路由器并防止网络填充低优先级流量。 可以将路由器配置为转发 UDP 流量,也可以在每次连接时提供端口号。
      • 如果客户端计算机使用 Windows 7、Windows Server 2008 或较新的操作系统,则客户端操作系统可能会删除 UDP 流量,因为来自服务器的响应是从查询的不同 IP 地址返回的。 此操作是阻止“松散源映射”的安全功能。 有关详细信息,请参阅联机丛书文章“故障排除:超时已过期”“多服务器 IP 地址”部分。 (本文摘自 2008 SQL Server 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 <version> 配置,然后选择 “客户端协议”。
    2. 在右窗格中,确保已启用 TCP/IP 。 如果 禁用 TCP/IP ,请右键单击 TCP/IP 并选择 “启用”。
    3. 请确保 TCP/IP 的协议顺序比旧版本) 协议上 (或 VIA 的命名管道数量要小。 通常,应将共享内存保留为顺序 1,将 TCP/IP 保留为顺序 2。 仅当客户端和SQL Server在同一台计算机上运行时,才使用共享内存。 所有启用的协议都会按顺序进行尝试,直到成功,但当连接不在同一台计算机上时,将跳过共享内存。

另请参阅