【问题标题】:How to find SQL Server running port?如何找到 SQL Server 运行端口?
【发布时间】:2012-09-06 09:57:08
【问题描述】:

是的,我读过这个How to find the port for MS SQL Server 2008?

运气不好。

远程登录 1433

返回连接失败,所以我必须指定其他端口。

我尝试使用

netstat -abn

但我在这个列表中没有看到 sqlservr.exe 或类似的东西。

为什么很难找到那个端口? :/

【问题讨论】:

  • 你检查过Sql Server Service 是否在运行吗?

标签: sql-server sql-server-2008 connection-string


【解决方案1】:

试试这个:

USE master
GO
xp_readerrorlog 0, 1, N'Server is listening on' 
GO

http://www.mssqltips.com/sqlservertip/2495/identify-sql-server-tcp-ip-port-being-used/

【讨论】:

  • 你尝试使用主数据库并运行这个
  • 如果返回 0 行 TCP/IP 被禁用。在 SQL Server 配置管理器中启用 TCP/IP。
  • 只是补充一下 - 在最近的版本中,似乎在开发人员版中默认禁用 TCP,而 UDP 处于打开状态。
【解决方案2】:

非常简单。 记下来自 taskmanager 的 sqlsrvr.exe PID 然后运行这个命令:

netstat -ano | findstr *PID*

它将显示您的 SQL 服务器的 TCP 和 UDP 连接(包括端口) TCP 标准为 1433,UDP 标准为 1434

示例:

【讨论】:

  • 这对我“反向”有效:需要找到我在 SSMS 中连接的远程计算机的(非默认)端口号。
【解决方案3】:

这是适合我的:

SELECT DISTINCT 
    local_tcp_port 
FROM sys.dm_exec_connections 
WHERE local_tcp_port IS NOT NULL 
【解决方案4】:

如果您可以启动 Sql Server 配置管理器 > SQL Server 网络配置 > 您的实例 > TCP/IP > 属性

【讨论】:

    【解决方案5】:

    如果您已运行“netstat -a -b -n”(从提升的命令提示符处)并且根本看不到“sqlservr.exe”,则说明您的 SQL Server 服务未运行或其 TCP/IP网络库已禁用。

    运行 SQL Server 配置管理器(开始 | 所有程序 | Microsoft SQL Server 2008 | 配置工具)。

    导航到 SQL Server 服务。 在右侧窗格中查找 SQL Server ()。它停止了吗?如果是,请启动它。

    导航到 SQL Server 网络配置(或适当的 SQL Server 网络配置(32 位)),然后导航到 . 在右侧窗格中查找“TCP/IP”。它被禁用了吗?如果是,请启用它,然后重新启动 SQL Server 服务。

    请注意,默认实例的实例 ID 将为 MSSQLSERVER。

    还请注意,您不必启用 TCP/IP 网络库即可将客户端连接到服务。客户端也可以通过 Shared Memory 网络库(如果客户端在同一台机器上)或 Named Pipes 网络库进行连接。

    【讨论】:

      【解决方案6】:

      也许它没有使用 TCP/IP

      查看 SQL Server 配置管理器以了解它使用的协议。

      【讨论】:

      【解决方案7】:

      这是我使用的另一个脚本:

      -- Find Database Port script by Jim Pierce  09/05/2018
      
      USE [master]
      GO
      
      DECLARE @DynamicportNo NVARCHAR(10);
      DECLARE @StaticportNo NVARCHAR(10);
      DECLARE @ConnectionportNo INT;
      
      -- Look at the port for the current connection
      SELECT @ConnectionportNo = [local_tcp_port]
       FROM sys.dm_exec_connections
          WHERE session_id = @@spid;
      
      -- Look for the port being used in the server's registry
      EXEC xp_instance_regread @rootkey = 'HKEY_LOCAL_MACHINE'
                              ,@key =
                               'Software\Microsoft\Microsoft SQL Server\MSSQLServer\SuperSocketNetLib\Tcp\IpAll'
                              ,@value_name = 'TcpDynamicPorts'
                              ,@value = @DynamicportNo OUTPUT
      
      EXEC xp_instance_regread @rootkey = 'HKEY_LOCAL_MACHINE'
                              ,@key =
                               'Software\Microsoft\Microsoft SQL Server\MSSQLServer\SuperSocketNetLib\Tcp\IpAll'
                              ,@value_name = 'TcpPort'
                              ,@value = @StaticportNo OUTPUT
      
      SELECT [PortsUsedByThisConnection] = @ConnectionportNo
            ,[ServerStaticPortNumber] = @StaticportNo
            ,[ServerDynamicPortNumber] = @DynamicportNo
      GO
      

      【讨论】:

        【解决方案8】:

        在我们的企业中,我无权访问 MSSQL Server,因此我无法访问系统表。

        对我有用的是:

        1. 捕获网络流量Wireshark(以管理员身份运行,选择网络接口),同时打开与服务器的连接。
        2. ping查找IP地址
        3. ip.dst == x.x.x.x过滤

        端口显示在info列中,格式为src.port -> dst.port

        【讨论】:

          【解决方案9】:

          尝试一次:-

          USE master
          DECLARE       @portNumber   NVARCHAR(10)
          EXEC   xp_instance_regread
          @rootkey    = 'HKEY_LOCAL_MACHINE',
          @key        =
          'Software\Microsoft\Microsoft SQL Server\MSSQLServer\SuperSocketNetLib\Tcp\IpAll',
          @value_name = 'TcpDynamicPorts',
          @value      = @portNumber OUTPUT
          SELECT [Port Number] = @portNumber
          GO
          

          【讨论】:

            【解决方案10】:

            【讨论】:

            • 请详细说明你的答案。
            • 虽然此链接可能有助于您回答问题,但您可以通过获取链接的重要部分并将其放入您的答案来改进此答案,这样可以确保您的答案仍然是一个答案,如果链接被更改或删除:)
            【解决方案11】:

            尝试通过以下方式启用协议: 配置管理器 > SQL服务器网络配置 > MSSQLSERVER协议 > TCP/IP的属性

            【讨论】:

              【解决方案12】:

              SQL Server 2000 程序 | 微软 SQL 服务器 | 客户端网络实用程序 | 选择 TCP_IP,然后选择属性

              SQL Server 2005 程序 | SQL 服务器 | SQL Server 配置管理器 | 选择 MSSQLSERVER 的协议或选择客户端协议并右键单击 TCP/IP

              【讨论】:

                【解决方案13】:

                如果您不想查看 SQL Server Management (sqlservermanager15.msc),请在数据库中运行此查询,例如来自 sqlcmd 或 ssms:

                SELECT * FROM [sys].[dm_tcp_listener_states]
                
                listener_id ip_address is_ipv4 port type type_desc state state_desc start_time
                1 ::1 False 1433 0 TSQL 0 ONLINE 2021-01-01 00:00:00.000000
                2 127.0.0.1 True 1433 0 TSQL 0 ONLINE 2021-01-01 00:00:00.000000

                感谢@vladimir-bashutin 指出这一点。这是另一个:

                SELECT [name]
                  ,[protocol_desc]
                  ,[type_desc]
                  ,[state]
                  ,[state_desc]
                  ,[is_admin_endpoint]
                FROM [master].[sys].[endpoints]
                
                name protocol_desc type_desc state state_desc is_admin_endpoint
                TSQL Local Machine SHARED_MEMORY TSQL 0 STARTED False
                TSQL Named Pipes NAMED_PIPES TSQL 0 STARTED False
                TSQL Default TCP TCP TSQL 0 STARTED False
                TSQL Default VIA VIA TSQL 0 STARTED False

                现在你有了端口和协议。如果您无权访问这些系统表,请考虑使用 SSRP 客户端,例如 https://github.com/adzm/ssrpc

                【讨论】:

                  【解决方案14】:

                  在 PowerShell 中,您可以使用它来查看您的实例正在使用的端口:

                  您可以将MSSQLSERVER 更改为您自己的实例名称。

                  $wmi = New-Object 'Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer' localhost
                  $tcp = $wmi.ServerInstances['MSSQLSERVER'].ServerProtocols['Tcp']
                  $ipAll = $tcp.IPAddresses | where { $_.Name -eq "IPAll" }
                  write-host ($ipAll.IPAddressProperties.value)
                  

                  【讨论】:

                    【解决方案15】:

                    也许不是最好的选择,但另一种方法是读取主机中的 Windows 注册表,在提升的 PowerShell 提示符下,您可以执行以下操作:

                    #Get SQL instance's Port number using Windows Registry:
                    $instName = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server').InstalledInstances[0]
                    $tcpPort = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\$instName\MSSQLServer\SuperSocketNetLib\Tcp").TcpPort
                    Write-Host The SQL Instance:  `"$instName`"  is listening on `"$tcpPort`"  "TcpPort."
                    

                    确保在主机服务器(托管您的 SQL 实例/SQL Server 安装)中运行此 PowerShell 脚本,这意味着您必须首先 RDP 进入 SQL Server/Box/VM,然后运行此代码。

                    HTH

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2020-08-16
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2010-10-12
                      • 1970-01-01
                      • 2022-08-11
                      相关资源
                      最近更新 更多