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

107

Я использую MS SQL Server 2008 на своем локальном компьютере. Я знаю, что порт по умолчанию - 1433, но почему-то он не прослушивает этот порт. SQL - это экспресс-выпуск.

Я уже пробовал журнал, SQL Server Management Studio, реестр и расширенную хранимую процедуру для поиска порта. Но я не смог его найти. Пожалуйста, помогите мне. Спасибо.

королевский призрак
источник
Я обновляю вопрос, добавляя другие ресурсы, которые я просматривал, чтобы у меня были их закладки, и другие также могли их использовать. blogs.msdn.com/sql_protocols/archive/2008/11/05/… decipherinfosys.wordpress.com/2008/01/02/… dumbledad.wordpress.com/2008/07/09/…
royalghost
Я использую TCP View, чтобы увидеть порт, на котором он работает. Я удивлен, увидев, что сервер использует динамический порт вместо 1433 даже после его установки в качестве экземпляра по умолчанию. Я также удалил экспресс-версию и установил полную версию, после чего только я могу видеть процесс как sqlservr.exe: 5272. И я предполагаю, что он прослушивает порт 5272.
royalghost

Ответы:

140

Нажмите Startкнопку в Windows. Перейти кAll Programs -> Microsoft SQL Server 2008 -> Configuration Tools -> SQL Server Configuration Manager

Щелкните SQL Native Client 10.0 Configuration -> Client Protocols -> TCP/IP дважды (щелкните правой кнопкой мыши выберите Properties) на TCP/IP.

Вы найдете Default Port 1433.

В зависимости от подключения номер порта может отличаться.

УдайКиран Пулипати
источник
На моем компьютере под управлением Windows 10 и с установленным SQL Server 2012 Express диспетчер конфигурации SQL Server не указан в меню «Пуск» Windows, но его можно найти в оснастке MMC « Управление компьютером» в группе « Службы и приложения ». Динамический порт также находится не в элементе «Конфигурация собственного клиента SQL» (для меня это версия «11.0»), а в элементе конфигурации сети SQL Server (и на вкладке IP-адреса окна свойств протокола TCP / IP по адресу самый низ, в настройке TCP Dynamic Ports ).
Кенни Эвитт
Этот ответ относится к клиентскому порту, а не к порту сервера, который задается в исходном вопросе. Ответ от @ Brothers28 ниже более точен.
Slogmeister Extraordinaire
52

Вы также можете посмотреть

netstat -abn

Он предоставляет порты с соответствующим приложением, которое держит их открытыми.

Изменить : или TCPView .

rslite
источник
Не могли бы вы сообщить мне, под каким именем MS SQL Server 2008 назван как приложение?
royalghost 05
2
Это должен быть sqlservr.exe (хотя мне не нужно его проверять).
rslite 05
1
Это сработало для меня. Номер порта указан в строке над [sqlservr.exe].
Зейн
Я нашел его в Ssms.exe
ThiagoPonte 08
49

Вот 5 методов, которые я нашел:

  • Метод 1: диспетчер конфигурации SQL Server
  • Метод 2: средство просмотра событий Windows
  • Метод 3: журналы ошибок SQL Server
  • Метод 4: DMV sys.dm_exec_connections
  • Метод 5: чтение реестра с помощью xp_instance_regread

Метод 4: sys.dm_exec_connections DMV
Я думаю, что это почти самый простой способ ...
DMV возвращают состояние сервера, которое можно использовать для мониторинга экземпляра SQL Server. Мы можем использовать sys.dm_exec_connections DMV для определения номера порта, который прослушивает экземпляр SQL Server, используя приведенный ниже код T-SQL:

SELECT local_tcp_port
FROM   sys.dm_exec_connections
WHERE  session_id = @@SPID
GO

Result Set:
local_tcp_port
61499

(1 row(s) affected)

Метод 1: диспетчер конфигурации SQL Server

Шаг 1. Щелкните Пуск> Все программы> Microsoft SQL Server 2012> Инструменты настройки> Диспетчер конфигурации SQL Server.

Шаг 2. Перейдите в Диспетчер конфигурации SQL Server> Сетевая конфигурация SQL Server> Протоколы для

Шаг 3. Щелкните правой кнопкой мыши TCP / IP и выберите Свойства.

введите описание изображения здесь

Шаг 4. В диалоговом окне свойств TCP / IP перейдите на вкладку IP-адреса и прокрутите вниз до группы IPAll.

введите описание изображения здесь

Если SQL Server настроен для работы на статическом порту, он будет доступен в текстовом поле TCP Port, а если он настроен на динамический порт, то текущий порт будет доступен в текстовом поле TCP Dynamic Ports. Здесь мой экземпляр прослушивает порт номер 61499.

Другие методы вы можете найти здесь: http://sqlandme.com/2013/05/01/sql-server-finding-tcp-port-number-sql-instance-is-listening-on/

братья28
источник
1
Работал у меня. Я попробовал свойства TCP / IP для конфигурации собственного клиента SQL, и это возвращало значение по умолчанию 1433. Но когда я проверил динамические порты TCP из конфигурации сети SQL Server. Я обнаружил, что это порт 67244. И после этого я смог успешно подключиться к этому порту. +1
Рувим
17

Я столкнулся с этим, потому что у меня просто были проблемы с созданием удаленного соединения, и я не мог понять, почему настройка порта 1433 в брандмауэре не работает. Теперь у меня наконец-то есть полная картина, поэтому я подумал, что должен поделиться.

Прежде всего необходимо включить "TCP / IP" с помощью диспетчера конфигурации SQL Server в разделе "Протоколы для SQLEXPRESS"!

Когда используется именованный экземпляр (в данном случае «SQLExpress»), он будет прослушивать динамический порт. Чтобы найти этот динамический порт, у вас есть несколько вариантов; назвать несколько:

  • проверка ERRORLOGSQL-сервера, расположенного '{MS SQL Server Path}\{MS SQL Server instance name}\MSSQL\Log'внутри (внутри вы найдете строку, подобную этой: "2013-07-25 10:30:36.83 Server Server is listening on [ 'any' <ipv4> 51118]"-> так что 51118 - это динамический порт в этом случае.

  • проверка реестра:, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\{MSSQL instance name}\MSSQLServer\SuperSocketNetLib\Tcp\IPAllдля моего случая TcpDynamicPorts=51118.

    Изменить : {MSSQL instance name}это что-то вроде:, MSSQL10_50.SQLEXPRESSне толькоSQLEXPRESS

Конечно, разрешение этого TCP-порта в брандмауэре и создание удаленного соединения путем передачи: "x.x.x.x,51118"(где xxxx - IP-адрес сервера) уже решает эту проблему на этом этапе.

Но потом я захотел подключиться удаленно, передав имя экземпляра (например:) x.x.x.x\SQLExpress. Именно тогда в игру вступает служба браузера SQL. Это модуль, который преобразует имя экземпляра в порт 51118. Служба браузера SQL прослушивает UDP-порт 1434 (стандартный и статический), поэтому мне пришлось разрешить это также в брандмауэре сервера.

Чтобы немного расширить фактический ответ: если кому-то еще не нравятся динамические порты и ему нужен статический порт для своего экземпляра SQL Server, следует попробовать эту ссылку .

Ученик
источник
1
+1 для службы браузера SQL. Это ключ к тому, как SQL Express работает с номерами портов
peterG
11

В журнале ERROLOG для строки, как показано ниже. Если вы этого не видите, значит, в SQL Server не включен удаленный доступ, или он просто не через TCP. Вы можете изменить это с помощью диспетчера конфигурации SQL Server.

Server is listening on [ 192.128.3.2 <ipv4> 1433].
мрденный
источник
Я не вижу этого журнала, но в SQL Server Management Studio в разделе «Подключения» установлен флажок «Разрешить удаленные подключения к этому серверу». Следовательно, я понимаю, что удаленное соединение разрешено.
royalghost 05
@royal: В дополнение к разрешению удаленных подключений вы также должны включить протокол TCP. Прямо сейчас сервер, вероятно, слушает только NP,
Ремус Русану
см. ниже ответ от @morteza, чтобы прочитать журнал с помощью SQL-запроса xp_readerrorlog 0, 1, N'Server is listening on'
Тило,
8

Я решил проблему, включив TCP / IP с помощью диспетчера конфигурации SQL Server в разделе «Протоколы для SQLEXPRESS2008», я перезапустил службу, и теперь в файле ERRORLOG отображается сообщение «Сервер прослушивает».

Лепез
источник
8

Попробуйте это (требуется доступ sys.dm_exec_connections):

SELECT DISTINCT 
    local_tcp_port 
FROM sys.dm_exec_connections 
WHERE local_tcp_port IS NOT NULL
Тило
источник
3
К вашему сведению: если у SQL-сервера нет открытого соединения, он, скорее всего, ничего не покажет.
Тило
6
USE master
GO
xp_readerrorlog 0, 1, N'Server is listening on', 'any', NULL, NULL, N'asc' 
GO

[Определите порт, используемый именованным экземпляром ядра СУБД SQL Server, прочитав журналы ошибок SQL Server]

Мортеза
источник
1
спасибо, хороший совет, Мортеза, я получаю сообщение об ошибке, используя вышеуказанное в SQL2012, но для моих нужд достаточно следующего: XP_READERRORLOG 0, 1, N'Server слушает '
mattpm
Скопируйте это сообщение об ошибке в свой запрос, но это работает, xp_readerrorlog 0, 1, N'Server is listening on'
Тило
6

Вы можете использовать эти две команды: tasklistиnetstat -oan

Tasklist.exeвроде taskmgr.exeно в текстовом режиме.

С помощью tasklist.exeили taskmgr.exeвы можете получить PIDsqlservr.exe

С помощью netstat -oanон показывает PID подключения, и вы можете его фильтровать.

Пример:

C:\>tasklist | find /i "sqlservr.exe"
sqlservr.exe  1184 Services    0 3.181.800 KB

C:\>netstat -oan | find /i "1184"
TCP  0.0.0.0:1280  0.0.0.0:0  LISTENING  1184

В этом примере порт SQLServer - 1280.

Взято из: http://www.sysadmit.com/2016/03/mssql-ver-puerto-de-una-instancia.html

Деместрестолк
источник
5

Я использую следующий скрипт в SSMS

SELECT
     s.host_name
    ,c.local_net_address
    ,c.local_tcp_port
    ,s.login_name
    ,s.program_name
    ,c.session_id
    ,c.connect_time
    ,c.net_transport
    ,c.protocol_type
    ,c.encrypt_option
    ,c.client_net_address
    ,c.client_tcp_port
    ,s.client_interface_name
    ,s.host_process_id
    ,c.num_reads as num_reads_connection
    ,c.num_writes as num_writes_connection
    ,s.cpu_time
    ,s.reads as num_reads_sessions
    ,s.logical_reads as num_logical_reads_sessions
    ,s.writes as num_writes_sessions
    ,c.most_recent_sql_handle
FROM sys.dm_exec_connections AS c
INNER JOIN sys.dm_exec_sessions AS s
    ON c.session_id = s.session_id

--filter port number
--WHERE c.local_tcp_port <> 1433
Рубенс
источник
Не уверен, почему это было отклонено, это не дает немедленного ответа, но дает вам ответ плюс еще многое другое. Добавляю это в свой список полезных запросов.
Тони
как и запрос, он также, кажется, не показывает, если соединение не открыто / не установлено.
Tilo
4

Это также можно сделать с помощью сканирования портов, что является единственно возможным методом, если у вас нет доступа администратора к удаленному серверу.

Использование Nmap ( http://nmap.org/zenmap/ ) для выполнения «Интенсивного сканирования TCP» даст вам такие результаты для всех экземпляров на сервере:

[10.0.0.1\DATABASE]    
Instance name: DATABASE
Version: Microsoft SQL Server 2008 R2 RTM    
Product: Microsoft SQL Server 2008 R2    
Service pack level: RTM    
TCP port: 49843    
Named pipe: \\10.0.0.1\pipe\MSSQL$DATABASE\sql\query

Важное примечание: для тестирования с помощью анализатора запросов или MS SQL Server Management Studio вы должны сформировать имя и порт своего сервера иначе, чем вы обычно подключаетесь к порту, например, через HTTP, используя запятую вместо двоеточия .

  • Имя сервера Management Studio: 10.0.0.1,49843
  • Строка подключения: Data Source=10.0.0.1,49843

тем не мение

  • Строка подключения JDBC: jdbc:microsoft:sqlserver://10.0.0.1:49843;DatabaseName=DATABASE
Шейн
источник
1

Это работает для SQL Server 2005 - 2012. Ищите событие id = 26022 в журнале ошибок под приложениями. Это покажет номер порта сервера sql, а также то, к каким IP-адресам разрешен доступ.

Мукус
источник
1

В дополнение к перечисленному выше мне пришлось включить порты TCP и UDP для удаленного подключения SQLExpress. Поскольку на моей машине разработки есть три разных экземпляра, я включаю 1430-1435и TCP, и UDP.

Д. Дэвидсон
источник