Как вывести список всех подключений в SQL Server?

Я использую эту версию SQL Server

Microsoft SQL Server 2019 (RTM-GDR) (KB4517790) - 15.0.2070.41 (X64)   Oct 28 2019 19:56:59   Copyright (C) 2019 Microsoft Corporation  Developer Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 19041: ) (Hypervisor) 

Я запускаю запрос

select @@CONNECTIONS;

результат

1629

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

Я хочу перечислить все соединения (в данном случае 1629), чтобы увидеть, что находится под капотом, как это сделать?


person Do Nhu Vy    schedule 25.10.2020    source источник
comment
Отвечает ли это на ваш вопрос? Как увидеть активные подключения к SQL Server?   -  person Frédéric    schedule 25.10.2020
comment
Я пробовал это решение stackoverflow.com/a/9392845/3728901, но оно возвращает 2 строки, это не то, что я ожидал. Я также пробовал другие решения в других ответах. Я также умею пользоваться поиском Google.   -  person Do Nhu Vy    schedule 25.10.2020


Ответы (3)


В @@CONNECTIONS документации говорится:

Возвращает количество попыток подключения - как успешных, так и неудачных - с момента последнего запуска SQL Server.

Хотя DMV SQL Server покажет текущие подключения, они не будут включать подробности прошлых подключений или неудачных попыток подключения. Чтобы получить исторические сведения об успешных и неудачных попытках входа в систему, вы можете использовать Аудит SQL Server или создать расширенную трассировку событий с файловой целью. Ниже приведен пример DDL для метода трассировки:

CREATE EVENT SESSION [logins] ON SERVER 
ADD EVENT sqlserver.process_login_finish
ADD TARGET package0.event_file(SET filename=N'logins')
WITH (STARTUP_STATE=ON);
person Dan Guzman    schedule 25.10.2020

Вы можете попробовать следующее:

SELECT DB_NAME(dbid) AS DBName,
COUNT(dbid) AS NumberOfConnections,
loginame
FROM    sys.sysprocesses
GROUP BY dbid, loginame
ORDER BY DB_NAME(dbid)
person Foster90    schedule 25.10.2020
comment
Как я уже говорил, он не может перечислить тысячи подключений. Я попробовал на своем компьютере. Давайте посмотрим что-нибудь user-images.githubusercontent.com / 1328316 / - person Do Nhu Vy; 25.10.2020
comment
@DoNhuVy, согласно документации, @@CONNECTIONS возвращает количество попыток подключения - как успешных, так и неудачных - с момента последнего запуска SQL Server. Исторические подробности недоступны через DMV. Вам необходимо создать трассировку, если вам нужна эта информация. - person Dan Guzman; 25.10.2020
comment
@ Foster90, sys.sysprocesses - это представление, устаревшее в версии SQL 2005, и его следует избегать в более современных версиях SQL Server. - person Dan Guzman; 25.10.2020
comment
@DanGuzman, что такое DMV? Выложим ваш ответ, я его приму. - person Do Nhu Vy; 25.10.2020
comment
@DoNhuVy, DMV - это Динамические управленческие представления. - person Dan Guzman; 25.10.2020

Вы можете использовать приведенный ниже запрос, чтобы узнать активные соединения -

SELECT
  conn.session_id,
  host_name,
  program_name,
  nt_domain,
  login_name,
  connect_time,
  last_request_end_time
FROM sys.dm_exec_sessions AS sess
INNER JOIN sys.dm_exec_connections AS conn ON sess.session_id = conn.session_id;
person Kshitij    schedule 25.10.2020
comment
Он не может перечислить все и достаточно тысячи подключений, как упоминалось. user-images.githubusercontent.com/1328316/ - person Do Nhu Vy; 25.10.2020
comment
Эта функция возвращает количество попыток подключения - как успешных, так и неудачных - с момента последнего запуска SQL Server. SQL Server не сохранил всю информацию об этих подключениях ... и этот запрос возвращает номер активного подключения :) - person Kshitij; 25.10.2020