Как найти рабочий порт SQL Server?

Да, я прочитал этот Как найти порт для MS SQL Server 2008?

Не повезло.

telnet 1433

возвращает соединение, поэтому я должен указать другой порт.

Я попытался использовать

netstat -abn

но я не вижу sqlservr.exe или что-то подобное в этом списке.

Почему так трудно найти этот порт?:/

Ответ 2

очень просто. запомните идентификатор sqlsrvr.exe из диспетчера задач затем выполните следующую команду:

netstat -ano | findstr *PID*

он отобразит соединения TCP и UDP вашего SQL-сервера (включая порты) стандартом является 1433 для TCP и 1434 для UDP

пример:  enter image description here

Ответ 3

Это тот, который работает для меня:

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

Ответ 4

Если вы можете запустить Sql Server Configuration Manager > Конфигурация сети 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 Network Configuration (32-разрядная версия)), а затем Protocols for. В правой панели найдите "TCP/IP". Это отключено? Если это так, включите его, а затем перезапустите службу SQL Server.

Обратите внимание, что идентификатор экземпляра будет MSSQLSERVER для экземпляра по умолчанию.

Также обратите внимание, что вам не нужно включать сетевую библиотеку TCP/IP для подключения клиента к службе. Клиенты также могут подключаться через сетевую библиотеку Shared Memory (если клиент находится на том же компьютере) или в сетевой библиотеке Named Pipes.

Ответ 6

Возможно, он не использует TCP/IP

Обратитесь к диспетчеру конфигурации SQL Server, чтобы узнать, какие протоколы он использует.

Ответ 7

В нашем предприятии у меня нет доступа к серверу MSSQL, поэтому я не могу получить доступ к системным таблицам.

Что для меня работает:

  • захватить сетевой трафик Wireshark (запуститься как "Администратор", выберите "Сетевой интерфейс" ), открыв соединение с сервером.
  • Найдите IP-адрес с помощью ping
  • фильтр с ip.dst == x.x.x.x

Порт отображается в столбце info в формате src.port -> dst.port

Ответ 8

Попробуйте включить протокол: Конфигуратор конфигурации > Конфигурация сети SQL Server > Протоколы для MSSQLSERVER > свойства TCP/IP

Ответ 9

Это еще один скрипт, который я использую:

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

Ответ 10

SQL Server 2000  Программы |  MS SQL Server |  Клиентская сетевая утилита |  Выберите TCP_IP, затем Properties

SQL Server 2005  Программы |  SQL Server |  Диспетчер конфигурации SQL Server |  Выберите Протоколы для MSSQLSERVER или выберите "Протоколы клиентов" и щелкните правой кнопкой мыши по TCP/IP

Ответ 11

попробуйте один раз: -

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

Ответ 13

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

Вот быстрый скрипт PowerShell (поскольку никто еще не предоставил решение в PowerShell :))

Примечание: это должно быть выполнено на сервере (либо RDP, либо с использованием PS Remoting), при правильном запуске после него будет напечатан точный номер порта:

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

Вам может понадобиться настроить код, он отлично работает для меня.

НТН