Да, я прочитал этот Как найти порт для MS SQL Server 2008?
Не повезло.
telnet 1433
возвращает соединение, поэтому я должен указать другой порт.
Я попытался использовать
netstat -abn
но я не вижу sqlservr.exe или что-то подобное в этом списке.
Почему так трудно найти этот порт?:/
Ответ 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/
Ответ 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
Ответ 12
select * from sys.dm_tcp_listener_states
Больше там: https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-tcp-listener-states-transact-sql?view=sql-server -2017
Ответ 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}
}
Вам может понадобиться настроить код, он отлично работает для меня.
НТН