你目前正处于脱机状态,正在等待 Internet 重新连接

如何配置 SQL Server 以侦听特定的端口

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 823938
概要
本文介绍了 Microsoft SQL Server 2008、SQL Server 2005 或 SQL Server 2000 中的静态和动态端口分配。它还讨论了如何将 SQL Server 的实例配置为使用静态端口或动态端口。
更多信息
静态端口分配
如果您配置实例的 SQL Server 使用静态端口,并且在重新启动 SQL Server 的实例,SQL Server 的实例仅监听指定的静态端口。SQL Server 客户端必须仅对静态实例的 SQL Server 正在侦听的端口发送的所有请求。

但是,如果实例的 SQL Server 是配置为侦听某个静态端口,和另一台计算机上运行的程序已经在 SQL Server 时使用指定的静态端口启动时,SQL Server 不会侦听指定的静态端口。

默认情况下的 SQL Server 默认实例侦听来自静态端口 1433年上的 SQL Server 客户端的请求。因此,客户端网络库假定端口 1433年或被定义为该客户端计算机的全局默认端口用于连接到的 SQL Server 默认实例。

如果 SQL Server 默认实例在端口 1433年以外的端口上侦听,则必须满足以下条件定义服务器别名的名称,或使用客户端网络实用程序更改的全局默认端口。但是,您也可以使默认实例SQL Server 侦听多个静态端口。

有关如何设置 SQL Server 侦听多个静态 TCP 端口的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
294453如何设置 SQL Server 侦听多个静态 TCP 端口
SQL Server 默认实例不支持动态端口分配。但是,SQL Server 的命名的实例支持静态和动态端口分配。默认情况下,通过 SQL Server 的命名的实例侦听动态端口。对于 SQL Server 的命名实例,SQL Server 2008年,SQL Server 2005 或 SQL Server 解析协议 (SSRP) 的 SQL Server 2000年的 SQL Server 浏览器服务始终用于翻译向端口不论是静态或动态端口实例名称。浏览器服务或 SSRP 从未使用的 SQL Server 默认实例。

动态端口分配
只有命名的实例的 SQL Server 可以使用动态端口分配过程。在动态端口分配过程中,当您首次启动 SQL Server 的实例端口设置为零 (0)。因此,SQL Server 请求可用端口从操作系统的数量。只要分配给 SQL 端口号服务器,SQL Server 开始分配的端口上进行侦听。

分配的端口号是写入到 Windows 注册表中。每次您启动该命名实例的 SQL Server,它使用该分配的端口号。但是,不太可能的情况下启动 SQL Server 时,使用另一个程序已在运行的计算机上的该以前分配 (而非静态) 端口号,SQL Server 中选择另一个端口。

在第二次启动 SQL Server 的命名的实例,SQL Server 将打开开始第一次,按如下所述的侦听端口号:
  • 如果没有错误打开该端口,则 SQL Server 侦听的端口。
  • 如果端口未打开,并出现错误,SQL Server 的行为,如下所示:
    • 您会收到以下错误消息:
      错误 ID 10048 (WSAEADDRINUSE)
      在收到此错误消息时,SQL Server 将确定正在使用的端口。然后,端口号是再次设置成零 (0)。因此,被分配了一个可用的端口。而且,SQL Server 等待客户端连接请求的端口上。
    • 如果您收到一条错误信息未提到 10048 错误,SQL Server 2000年将确定不可能在等待端口上的连接请求。因此,端口未打开。
备注
  • 在 SQL Server 2005 中,当您收到以下错误消息,端口号设置为零 (0) 并打开。
    错误 ID 10013 (WSAEACCES)
  • 在 Windows Server 2003 或 Windows XP 中,您试图打开的端口以独占方式使用时可能会收到 10013 错误消息而不是 10048 错误消息。
当 SQL Server 的实例使用动态端口分配,连接在 SQL Server 客户端生成的字符串未指定目标 TCP/IP除非用户或程序员显式指定的端口的端口。因此,SQL Server 客户端库查询 UDP 端口 1434年上的服务器若要收集有关 SQL Server 的目标实例的信息。当SQL Server 返回的信息,SQL Server 客户端库将发送到适当的 SQL Server 实例中的数据。

如果禁用 UDP 端口 1434年,则 SQL Server 客户端不能动态确定 SQL Server 的命名实例的端口。因此,SQL Server 客户端可能无法连接到 SQL Server 的命名实例。在这种情况下,SQL Server 客户端必须指定 SQL Server 2008年,SQL Server 2005 或 SQL Server 2000年的命名的实例侦听的动态分配的端口。

有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
265808如何连接到 SQL Server 通过使用 SQL Server 的早期版本


验证 SQL Server 的实例的端口配置
注意SQL Server 默认实例始终使用静态端口。

第一次验证您的 SQL Server 实例启用了 TCP/IP 协议。然后检查 SQL Server 错误日志以找到您的 SQL Server 实例正在"侦听"哪一个 TCP/IP 端口。此外,在 SQL Server 2005 及更高版本,您可以检查设置 SQL Server 配置管理器中。如果您想要查看内部程序从 SQL 错误日志,请按照下列步骤。

注意对于 SQL Server 2000 中,使用查询分析器执行以下查询。
  1. 开始 SQL Server 管理 Studio,并将连接到的 SQL Server 实例。
  2. 运行下面的查询:
    Use master Go Xp_readerrorlog
  3. 在中 结果 窗格中,找到以下文本 (其中 X.X.X.X是 SQL Server 的实例的 IP 地址和Y 为在 SQL Server 正在侦听 TCP/IP 端口):
    SQL 服务器侦听 X.X.X.X: Y
    注:例如,如果您找到"SQL 服务器 10.150.158.246 上侦听: 1433"中的文本 结果 窗格中,10.150.158.246 是 SQL Server 和 1433年的 IP 地址是其中的 SQL Server 实例正在侦听 TCP/IP 端口。
若要验证的端口配置实例的 SQL Server,请执行以下步骤:
  1. 启动注册表编辑器。
  2. 在注册表编辑器中,找到以下注册表项:
    SQL HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MicrosoftServer\<InstanceName>\MSSQLServer\SuperSocketNetLib\Tcp</InstanceName>
    注意如果您使用的 SQL Server 2005,找到以下注册表子项:
    SQL Server\ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft<MSSQL.x>\MSSQLServer\SuperSocketNetLib\Tcp\IPAll</MSSQL.x>
    请注意,TCPDynamicPorts 的值和 TCPPort 值。这取决于您的端口分配方法,如下所示,出现下列值:
    • 静态端口分配
      如果您配置若要使用的 SQL Server 的实例静态端口,并且您具有尚未重新启动该实例的 SQL Server,设置注册表值,如下所示:
      TCPDynamicPorts = 最后一个使用的端口
      TCPPort = 新静态端口,以便在下次重新启动 ; 后使用新的静态端口您通过使用服务器网络实用程序设置
      但是,如果您配置若要使用的 SQL Server 的实例静态端口,并且您重新启动的实例SQL Server,注册表值设置为如下所示:
      TCPDynamicPorts = 空白
      TCPPort = 新的静态端口您通过使用服务器网络实用程序设置
    • 动态端口分配
      如果您配置若要使用的 SQL Server 的实例动态端口分配,并且您具有尚未重新启动该实例的 SQL Server,设置注册表值,如下所示:
      TCPDynamicPorts = 空白
      TCPPort = 0
      但是,如果您配置若要使用动态端口分配,并且您的 SQL Server 的实例重新启动的实例SQL Server,注册表设置的值,如下所示:
      TCPDynamicPorts = 当前使用的端口
      TCPPort = 当前使用的端口


将 SQL Server 的实例配置为使用静态端口

SQL Server 2008年和 SQL Server 2005

若要配置的使用静态端口,SQL Server 2008年或 SQL Server 2005 实例,请按照中所述的步骤如何: 服务器配置为侦听特定 TCP 端口 (SQL Server 配置管理器) 上在 SQL Server 2005 联机丛书或 SQL Server 2008年联机丛书中的主题。

若要将静态端口配置为专用的专用管理员连接 (DAC),则必须更新到您的实例相对应的注册表项。例如,可能是以下注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL。X\MSSQLServer\SuperSocketNetLib\AdminConnection\Tcp
注意在"MSSQL 种"X"。X"是一个数字,指示 SQL Server 2005 或 SQL Server 2008年实例名称实例所在的目录。

SQL Server 2000

若要配置实例的 SQL Server 使用静态端口,请按照下列步骤操作:
  1. 启动服务器网络实用程序。要执行此操作,请执行下列内容之一:
    • 单击 开始指向程序指向 Microsoft SQL Server和然后单击 服务器网络实用程序.
    • 单击 开始然后单击 运行.在中 打开 框中键入 svrnetcn.exe然后单击 确定.
    " 服务器网络实用程序 出现对话框。
  2. 在中 服务器网络实用程序 对话框中,单击 常规 选项卡。
  3. 在中在此服务器上的实例 列表中,选择您的 SQL Server 实例。

    注意如果 TCP/IP 协议被禁用,请现在将其启用。若要执行此操作,请单击 TCP/IP 在中 已禁用协议 列表,然后再单击 启用.
  4. 在中 已启用协议 列表中单击 TCP/IP然后单击属性.
  5. 在中 默认端口 框中,键入静态端口号,然后单击 确定.

    注意您指定的静态端口必须不同于动态 SQL Server 实例当前正在侦听的端口。对于例如,如果将 SQL Server 的实例当前正在侦听 TCP/IP 动态1400,端口类型 1500 为新的静态端口。
  6. 单击 确定 两次。
  7. 重新启动 SQL Server 的实例。
  8. 查看 SQL Server 错误日志以验证 SQL Server 的实例使用静态端口。

    注意如果您有群集的实例的 SQL Server,并且您按照在群集节点上指定的步骤,您可能注意到 TCPDynamicPorts 注册表值和其他群集节点上的 TCPPort 注册表值仍保留的旧值。当移动到相应的群集节点,SQL Server 组,然后将SQL Server 联机群集节点上,在群集节点上的注册表值将反映正确的值。
您可能希望将您的 SQL 实例的静态端口设置服务器为其先前使用动态端口的相同端口号。若要执行此操作,请按照这些步骤如下:
  1. 查看 TCPDynamicPorts 注册表值和 TCPPort 注册表值,以确定 SQL Server 的早期实例使用的动态端口号。
  2. 服务器网络实用工具中的静态端口设置为不同的端口号与您在步骤 1 中确定的注册表值。
  3. 重新启动 SQL Server 的实例。
  4. 在服务器网络实用工具中设置为静态端口您在步骤 1 中确定的注册表值。
  5. 重新启动 SQL Server 的实例。


配置为使用动态端口的 SQL Server 的实例

SQL Server 2008年和 SQL Server 2005

要配置您的 SQL Server 2008年实例或实例的 SQL Server 2005,以使用动态端口,请使用类似的方法中所述"如何: 服务器配置为侦听特定 TCP 端口 (SQL Server 配置管理器)"在 SQL Server 2008年联机丛书或 SQL Server 2005 联机丛书中的主题。有关详细信息,请参阅 SQL Server 2008年联机丛书 》 中或在 SQL Server 2005 联机丛书中的服务器网络配置主题。

SQL Server 2000

要配置为使用动态端口的 SQL Server 实例,请执行以下步骤:
  1. 启动服务器网络实用程序。要执行此操作,请执行下列内容之一:
    • 单击 开始指向程序指向 Microsoft SQL Server和然后单击 服务器网络实用程序.
    • 单击 开始然后单击 运行.在中 打开 框中键入 svrnetcn.exe然后单击 确定.
    " 服务器网络实用程序 出现对话框。
  2. 在中 服务器网络实用程序 对话框中,单击 常规 选项卡。
  3. 在中在此服务器上的实例 列表中,选择您的 SQL Server 实例。

    注意如果 TCP/IP 协议被禁用,请现在将其启用。若要执行此操作,请单击 TCP/IP 在中 已禁用协议 列表,然后再单击 启用.
  4. 在中 已启用协议 列表中单击 TCP/IP然后单击属性.
  5. 在中 默认端口 框中键入0然后单击 确定.
  6. 单击 确定然后单击确定 更新。
  7. 重新启动 SQL Server 的实例。
  8. 查看 SQL Server 错误日志以验证 SQL Server 实例正在使用的动态端口。

    注意如果您有群集的实例的 SQL Server,并且您按照在群集节点上指定的步骤,您可能注意到 TCPDynamicPorts 注册表值和其他群集节点上的 TCPPort 注册表值仍保留的旧值。当移动到相应的群集节点,SQL Server 组,然后将SQL Server 联机群集节点上,在群集节点上的注册表值将反映正确的值。


故障排除
如果 SQL Server 客户端无法访问的实例SQL Server 配置它以使用之后静态 TCP/IP 端口,可能存在以下原因:
  • A防火墙可能阻止了指定的 TCP/IP 端口。
    如果您的防火墙阻塞 SQL Server 的实例当前正在侦听的端口,则连接将失败。有关如何配置防火墙,使其与您的 SQL Server 工作有关的信息,请参阅 SQL Server 2008年联机丛书中的Windows 防火墙允许 SQL Server 访问配置主题。虽然本主题是特定于 SQL Server 2008年,但大部分信息将适用于 SQL Server 2005 和 SQL Server 2000年。

    详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    287932为 SQL 通信通过防火墙所需的 TCP/IP 端口号
    318432 错误: 无法连接到群集命名实例通过防火墙
    968872 如何为 Windows Server 2008 上 SQL Server 打开的防火墙端口
  • 另一个程序可能已经在使用指定的 TCP/IP 端口。
    如果另一个程序已在使用指定的 TCP/IP 端口,该端口不可用于 SQL Server 和 SQL Server 的实例客户端可能无法连接到 SQL Server 的实例。

    这问题是特定于配置为使用的 SQL Server 的实例静态 TCP/IP 端口。对于 SQL Server 的实例不会出现此问题它被配置为使用动态端口分配。在动态端口分配,如果另一程序已在使用指定的 TCP/IP 端口的 SQL 实例启动时服务器的 SQL 实例服务器中选择一个新的端口。

    有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    293107客户端无法与 SQL Server 通过端口 1433年或 SQL Server 正在侦听的端口进行通信
  • 命名实例的 SQL Server 正在侦听端口 1433年上。
    命名实例的 SQL Server 正在侦听端口 1433,Microsoft OLE DB 提供程序为 SQL Server (提供程序 = SQLOLEDB) 和 SQL Server ODBC 驱动程序 (驱动程序 = {SQL Server}) 可能无法连接到服务器。这种失败连接的实例名称和端口号的连接字符串中省略时发生。如果未不指定任何端口号,则驱动程序将验证服务器实例名称。如果服务器实例名称不是默认实例,MSSQLSERVER,连接将失败。若要启用连接成功,您必须指定实例名称或端口号或 SQL 别名中的连接字符串。

    备注
    • 我们不建议您已在端口 1433年上侦听的命名的实例。
    • 其他提供程序,如 System.Data.SqlClient 和 SQL 本机客户端 (提供程序 = SQLNCLI),不执行实例名称检查,成功连接。
参考
详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
286303SQL Server 2000 网络库在动态端口检测期间的行为
273673 SQL 虚拟服务器客户端连接的说明
328383 当客户端计算机尝试连接到 SQL Server 的实例时,SQL Server 客户端可能会更改协议
有关如何配置 SQL Server 以侦听不同 IP 地址的不同端口的详细信息,请参阅以下 Microsoft SQL Server 支持博客网站上的如何配置 SQL Server 以侦听不同 IP 地址的不同端口?主题:

警告:本文已自动翻译

属性

文章 ID:823938 - 上次审阅时间:07/16/2013 07:19:00 - 修订版本: 7.1

Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2008 Express, Microsoft SQL Server 2008 Workgroup, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL 2005 Server Enterprise, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Express Edition, Microsoft SQL 2005 Server Workgroup, Microsoft SQL Server 2000 Developer Edition, Microsoft SQL Server 2000 Enterprise Edition, Microsoft SQL Server 2000 标准版, Microsoft SQL Server 2008 R2 Developer, Microsoft SQL Server 2008 R2 Enterprise, Microsoft SQL Server 2008 R2 Express, Microsoft SQL Server 2008 R2 Standard, Microsoft SQL Server 2008 R2 Workgroup

  • kbsqlsetup kbsql2005cluster kbconnectivity kbupdate kbsqlclient kbnetwork kbfirewall kbconfig kbregistry kbhowtomaster kbmt KB823938 KbMtzh
反馈
body>