J'utilise SQL Server 2008 Enterprise. Je veux voir toutes les connexions SQL Server actives et les informations connexes de toutes les connexions, telles que l'adresse IP à partir de laquelle, se connecter à quelle base de données ou quelque chose.
Existe-t-il des commandes existantes pour résoudre ce problème?
Vous pouvez utiliser la procédure stockée sp_who
.
Fournit des informations sur les utilisateurs, les sessions et les processus en cours dans une instance du moteur de base de données Microsoft SQL Server. Les informations peuvent être filtrées pour ne renvoyer que les processus qui ne sont pas inactifs, qui appartiennent à un utilisateur spécifique ou qui appartiennent à une session spécifique.
SELECT
DB_NAME(dbid) as DBName,
COUNT(dbid) as NumberOfConnections,
loginame as LoginName
FROM
sys.sysprocesses
WHERE
dbid > 0
GROUP BY
dbid, loginame
;
Consultez également la documentation de Microsoft pour sys.sysprocesses .
En plus de sp_who
, vous pouvez également utiliser la procédure système "non documentée" sp_who2
qui vous donne des informations plus détaillées. Voir Différence entre sp_who et sp_who2.
Cliquez sur l'icône "moniteur d'activité" dans la barre d'outils ...
D'après les commentaires de Thorsten:
Dans SQL Server Management Studio, faites un clic droit sur le serveur, choisissez "Moniteur d'activité" dans le menu contextuel - ou - utilisez le raccourci clavier Ctrl + Alt + A.
Voici mon script pour trouver toutes les sessions connectées à une base de données et vous pouvez vérifier si ces sessions effectuent des entrées/sorties et il existe une option pour les tuer.
Le script affiche également le statut 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
--==============================================================================
J'ai jeté cela ensemble afin que vous puissiez faire une requête 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
La requête de MS expliquant l'utilisation de la commande " kill " est très utile pour fournir les informations de connexion:
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, salutations