Como vejo as ligações activas do servidor SQL? [fechado]

estou a usar a SQL Server 2008 Enterprise. Eu quero ver qualquer conexão de servidor SQL ativa, e a informação relacionada de todas as conexões, como a partir de qual endereço IP, conectar a qual banco de dados ou algo assim.

Existem ferramentas para resolver este problema?

Author: Peter Mortensen, 2009-08-08

6 answers

Podes usar o sp_who procedimento armazenado.

Fornece informações sobre usuários atuais, sessões e processos em uma instância do motor de banco de dados Microsoft SQL Server. A informação pode ser filtrada para retornar apenas os processos que não estão inactivos, que pertencem a um usuário específico, ou que pertencem a uma sessão específica.

 286
Author: 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
;

Ver também a documentação da Microsoft para sys.sysprocesses .

 276
Author: Syed Umar Ahmed, 2017-11-10 11:29:07

Para além de sp_who, também pode utilizar o procedimento "não documentado" sp_who2 que lhe dá informações mais detalhadas. Veja diferença entre sp_who e sp_who2.

 44
Author: Sklivvz, 2017-11-21 18:21:36

Carregue no ícone" Monitor de actividades " da barra de ferramentas...

Das observações de Thorsten:

No SQL Server Management Studio, carregue com o botão direito no Servidor, escolha "Activity Monitor" Do Menu de contexto ou use o atalho de teclado Ctrl + Alt + A

 34
Author: Fernando Santos, 2017-11-21 18:22:47

Abaixo está o meu script para encontrar todas as sessões ligadas a uma base de dados e você pode verificar se essas sessões estão a fazer qualquer i/O e existe uma opção para matá-las.

O programa mostra também o estado de cada sessão.

Dá uma vista de olhos lá em baixo.
--==============================================================================
-- 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
Author: marcello miorelli, 2017-11-21 18:24:41

Juntei isto para que pudesses fazer algumas perguntas sobre os resultados

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
Author: Don Rolling, 2012-08-22 17:43:17