Comment puis-je voir les connexions SQL Server actives? [fermé]

j'utilise SQL Server 2008 Enterprise. Je veux voir toutes les connexions de serveur SQL actives, et les informations connexes de toutes les connexions, comme à partir de quelle adresse IP, se connecter à quelle base de données ou quelque chose.

Existe-t-il des outils pour résoudre ce problème?

231
demandé sur Peter Mortensen 2009-08-08 13:26:37

6 réponses

vous pouvez utiliser le sp_who procédure stockée.

fournit des informations sur les utilisateurs actuels, les sessions et les processus dans une instance du moteur de base de données Microsoft SQL Server. Les informations peuvent être filtrés pour retourner uniquement les processus qui ne sont pas inactifs, qui appartiennent à un utilisateur spécifique, ou qui appartiennent à une session particulière.

286
répondu Mehrdad Afshari 2017-11-21 18:26:58
SELECT 
    DB_NAME(dbid) as DBName, 
    COUNT(dbid) as NumberOfConnections,
    loginame as LoginName
FROM
    sys.sysprocesses
WHERE 
    dbid > 0
GROUP BY 
    dbid, loginame
;

Voir aussi la documentation de Microsoft pour sys.processus sys .

276
répondu Syed Umar Ahmed 2017-11-10 11:29:07

en dehors de sp_who , vous pouvez également utiliser la procédure" non documentée " sp_who2 système stocké qui vous donne des informations plus détaillées. Voir différence entre sp_who et sp_who2 .

44
répondu Sklivvz 2017-11-21 18:21:36

cliquez sur l'icône" moniteur d'activité " dans la barre d'outils...

De Thorsten commentaires:

dans SQL Server Management Studio, clic droit sur le serveur, choisissez" Activity Monitor "à partir du menu contextuel ou utilisez le raccourci clavier Ctrl + Alt + a .

34
répondu Fernando Santos 2017-11-21 18:22:47

ci-dessous est mon script pour trouver toutes les sessions connectées à une base de données et vous pouvez vérifier si ces sessions font une entrée/sortie et il y a une option pour les tuer.

le script montre également l'état de chaque session.

Regardez ci-dessous.

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

--==============================================================================
16
répondu marcello miorelli 2017-11-21 18:24:41

j'ai rassemblé ceci pour que vous puissiez poser quelques questions sur les résultats

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
12
répondu Don Rolling 2012-08-22 17:43:17