Как я вижу активные соединения SQL Server?

Я использую SQL Server 2008 Enterprise. Я хочу видеть любые активные подключения к SQL Server и соответствующую информацию обо всех подключениях, например, с какого IP-адреса, к какой базе данных подключаться или к чему-либо.

Существуют ли команды для решения этой проблемы?

8.08.2009 09:26:37
Tilo 5.04.2019 17:09:38
sys.dm_exec_sessions, идентификатор сеанса для проверки> 50
Shiwangini 20.09.2019 20:01:05
8 ОТВЕТОВ
РЕШЕНИЕ

Вы можете использовать sp_whoхранимую процедуру.

Предоставляет информацию о текущих пользователях, сеансах и процессах в экземпляре ядра СУБД Microsoft SQL Server. Информация может быть отфильтрована, чтобы возвращать только те процессы, которые не простаивают, принадлежат определенному пользователю или принадлежат определенному сеансу.

346
21.11.2017 18:26:58
когда вам нужно отфильтровать для конкретной базы данных, лучше выбрать sys.sysprocesses
Iman 2.12.2013 04:29:01
Как добавить фильтр только для определенных баз данных? ГДЕ dbname = 'имя базы данных' ?? Я попытался это, и я получил ошибку
NULL.Dude 20.09.2017 16:18:41
@ Geo.Dude, Iman Abidi означает создание собственного запроса select из sys.sysprocesses и добавление предложения where к этому запросу. Вам придется фильтровать на dbid. Вы можете найти идентификатор базы данных в sys.databases (или вы можете присоединиться к этим двум).
bvgheluwe 18.01.2018 08:03:27

Кроме того sp_who, вы также можете использовать «недокументированную» sp_who2системную хранимую процедуру, которая дает вам более подробную информацию. Смотрите Разница между sp_who и sp_who2 .

54
21.11.2017 18:21:36
кто подключен к dbo.First?
Carl G 12.01.2013 21:52:46
SELECT 
    DB_NAME(dbid) as DBName, 
    COUNT(dbid) as NumberOfConnections,
    loginame as LoginName
FROM
    sys.sysprocesses
WHERE 
    dbid > 0
GROUP BY 
    dbid, loginame
;

Смотрите также документацию Microsoft для sys.sysprocesses .

334
10.11.2017 11:29:07
При автоматизации вещей этот запрос может быть более полезным, чем sp_who, который больше ориентирован на отображение.
Colin 14.01.2013 20:09:34
Это мой предпочтительный метод, но он не полностью отвечает на вопрос ОП. Предлагайте добавление hostnameк SELECTи GROUP BYстатей , чтобы увидеть , что подключены клиенты. Кроме того, я только что понял опечатку Msft для loginame- это артефакт, когда имена столбцов были ограничены 8 символов? LOL
nothingisnecessary 12.09.2014 23:09:39
sys.sysprocesses устарела в более поздних версиях SQL Server. Он сопоставляется с этими тремя представлениями управления : sys.dm_exec_connections, sys.dm_exec_sessions и sys.dm_exec_requests.
Mike Sherrill 'Cat Recall' 7.02.2016 16:19:48
Мне нравитсяORDER BY 1, 2 DESC, 3
slartidan 10.07.2019 14:56:18

Нажмите значок «Монитор активности» на панели инструментов ...

Из комментариев Торстена:

В SQL Server Management Studio щелкните правой кнопкой мыши Сервер, выберите «Монитор активности» в контекстном меню или воспользуйтесь сочетанием клавиш Ctrl+ Alt+ A.

43
21.11.2017 18:22:47
В SQL Server Management Studio щелкните правой кнопкой мыши Сервер, выберите «Монитор активности» в контекстном меню или воспользуйтесь сочетанием клавиш Ctrl + Alt + A
Thorsten Hüglin 20.02.2015 14:48:23
Хороший вариант, но он требует больше привилегий, чем извлечение DB_NAME (dbid) из процессов sys.sys.
Der Zinger 26.01.2016 07:18:55

Я собрал это вместе, чтобы вы могли сделать некоторые запросы на результаты

Declare @dbName varchar(150)
set @dbName = '[YOURDATABASENAME]'

--Total machine connections
--SELECT  COUNT(dbid) as TotalConnections FROM sys.sysprocesses WHERE dbid > 0

--Available connections
DECLARE @SPWHO1 TABLE (DBName VARCHAR(1000) NULL, NoOfAvailableConnections VARCHAR(1000) NULL, LoginName VARCHAR(1000) NULL)
INSERT INTO @SPWHO1 
    SELECT db_name(dbid), count(dbid), loginame FROM sys.sysprocesses WHERE dbid > 0 GROUP BY dbid, loginame
SELECT * FROM @SPWHO1 WHERE DBName = @dbName

--Running connections
DECLARE @SPWHO2 TABLE (SPID VARCHAR(1000), [Status] VARCHAR(1000) NULL, [Login] VARCHAR(1000) NULL, HostName VARCHAR(1000) NULL, BlkBy VARCHAR(1000) NULL, DBName VARCHAR(1000) NULL, Command VARCHAR(1000) NULL, CPUTime VARCHAR(1000) NULL, DiskIO VARCHAR(1000) NULL, LastBatch VARCHAR(1000) NULL, ProgramName VARCHAR(1000) NULL, SPID2 VARCHAR(1000) NULL, Request VARCHAR(1000) NULL)
INSERT INTO @SPWHO2 
    EXEC sp_who2 'Active'
SELECT * FROM @SPWHO2 WHERE DBName = @dbName
13
22.08.2012 17:43:17
sys.sysprocesses is deprecated
Marcello Miorelli 27.08.2018 19:57:29

Below is my script to find all the sessions connected to a database and you can check if those sessions are doing any I/O and there is an option to kill them.

The script shows also the status of each session.

Have a look below.

--==============================================================================
-- See who is connected to the database.
-- Analyse what each spid is doing, reads and writes.
-- If safe you can copy and paste the killcommand - last column.
-- Marcelo Miorelli
-- 18-july-2017 - London (UK)
-- Tested on SQL Server 2016.
--==============================================================================
USE master
go
SELECT
     sdes.session_id
    ,sdes.login_time
    ,sdes.last_request_start_time
    ,sdes.last_request_end_time
    ,sdes.is_user_process
    ,sdes.host_name
    ,sdes.program_name
    ,sdes.login_name
    ,sdes.status

    ,sdec.num_reads
    ,sdec.num_writes
    ,sdec.last_read
    ,sdec.last_write
    ,sdes.reads
    ,sdes.logical_reads
    ,sdes.writes

    ,sdest.DatabaseName
    ,sdest.ObjName
    ,sdes.client_interface_name
    ,sdes.nt_domain
    ,sdes.nt_user_name
    ,sdec.client_net_address
    ,sdec.local_net_address
    ,sdest.Query
    ,KillCommand  = 'Kill '+ CAST(sdes.session_id  AS VARCHAR)
FROM sys.dm_exec_sessions AS sdes

INNER JOIN sys.dm_exec_connections AS sdec
        ON sdec.session_id = sdes.session_id

CROSS APPLY (

    SELECT DB_NAME(dbid) AS DatabaseName
        ,OBJECT_NAME(objectid) AS ObjName
        ,COALESCE((
            SELECT TEXT AS [processing-instruction(definition)]
            FROM sys.dm_exec_sql_text(sdec.most_recent_sql_handle)
            FOR XML PATH('')
                ,TYPE
            ), '') AS Query

    FROM sys.dm_exec_sql_text(sdec.most_recent_sql_handle)

) sdest
WHERE sdes.session_id <> @@SPID
  AND sdest.DatabaseName ='yourdatabasename'
--ORDER BY sdes.last_request_start_time DESC

--==============================================================================
25
21.11.2017 18:24:41

MS's query explaining the use of the "kill" command is quite useful providing connection's information:

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
JOIN sys.dm_exec_connections AS conn
   ON sess.session_id = conn.session_id;

HTH, regards,

5
20.05.2019 11:21:14

You can perform the following T-SQL command:

SELECT * FROM sys.dm_exec_sessions WHERE status = 'running';
4
11.12.2019 15:27:19