如何查找SQL Server运行端口?

时间:2012-09-06 09:57:08

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

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

没有运气。

  

telnet 1433

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

我尝试使用

  

netstat -abn

但我没有在此列表中看到sqlservr.exe或类似内容。

为什么找到那个港口这么困难? :/

15 个答案:

答案 0 :(得分:126)

试试这个:

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/

答案 1 :(得分:65)

很简单。 记下来自taskmanager的sqlsrvr.exe PID 然后运行此命令:

netstat -ano | findstr *PID*

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

示例:  enter image description here

答案 2 :(得分:49)

这是适合我的那个:

SELECT DISTINCT 
    local_tcp_port 
FROM sys.dm_exec_connections 
WHERE local_tcp_port IS NOT NULL 

答案 3 :(得分:33)

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

enter image description here

答案 4 :(得分:8)

如果您运行了“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网络库即可将客户端连接到服务。客户端还可以通过共享内存网络库(如果客户端位于同一台计算机上)或命名管道网络库进行连接。

答案 5 :(得分:3)

也许它没有使用TCP / IP

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

答案 6 :(得分:2)

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

对我有用的是:

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

    该端口以info

    格式显示在src.port -> dst.port列中

答案 7 :(得分:1)

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

的属性

答案 8 :(得分:0)

SQL Server 2000    程序|    MS SQL Server |    客户网络实用程序|    选择TCP_IP,然后选择Properties

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

答案 9 :(得分:0)

尝试一次:-

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 :(得分:0)

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

-- 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

答案 11 :(得分:0)

答案 12 :(得分:0)

这是一个快速的PowerShell脚本(因为还没有人在PowerShell中提供解决方案:))

这将显示确切的端口号,例如:“ Sql Server正在侦听端口:1433

$id = (ps "sql*" | ? {$_.ProcessName -eq "sqlservr"}).Id
$strAllSQLConnections = netstat -ano | findstr $id
$port = $strAllSQLConnections | % { if($_ -match "0\.0\.0\.0:\d{2,5}") {$Matches[0]} }
$port = ($port -split ':')[1]
cls
Write-Host "Sql Server is listening on port: " $port

对我来说很棒,我很高兴任何人都可以扩展代码以添加功能。 HTH

答案 13 :(得分:0)

PowerShell具有良好的格式并能够区分进程:

ForEach ($SQL_Proc in Get-Process | Select-Object -Property ProcessName, Id | Where-Object {$_.ProcessName -like "*SQL*"})
{
    Get-NetTCPConnection | `
     Where-Object {$_.OwningProcess -eq $SQL_Proc.id} | `
      Select-Object -Property `
                                @{Label ="Process_Name";e={$SQL_Proc.ProcessName}}, `
                                @{Label ="Local_Address";e={$_.LocalAddress + ":" + $_.LocalPort }},  `
                                @{Label ="Remote_Address";e={$_.RemoteAddress + ":" + $_.RemotePort}}, State | `
      Format-Table
}

默认输出:

enter image description here

答案 14 :(得分:-1)

也许不是最好的选择,但是另一种方法是在主机上读取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."

enter image description here 确保在主机服务器(承载SQL实例/ SQL Server安装的主机服务器)中运行此PowerShell脚本,这意味着您必须先将RDP插入SQL Server / Box / VM,然后运行此代码。

HTH