SQL Server 2008 Enterprise kullanıyorum. Herhangi bir aktif SQL Server bağlantısını ve hangi IP adresinden hangi veritabanına bağlandığına benzer tüm bağlantıların ilgili bilgilerini görmek istiyorum.
Bu sorunu çözmek için mevcut komutlar var mı?
SQL Server 2008 Enterprise kullanıyorum. Herhangi bir aktif SQL Server bağlantısını ve hangi IP adresinden hangi veritabanına bağlandığına benzer tüm bağlantıların ilgili bilgilerini görmek istiyorum.
Bu sorunu çözmek için mevcut komutlar var mı?
Yanıtlar:
sp_who
Saklı yordamı kullanabilirsiniz .
Microsoft SQL Server Veritabanı Altyapısı örneğinde geçerli kullanıcılar, oturumlar ve işlemler hakkında bilgi sağlar. Bilgiler yalnızca boşta olmayan, belirli bir kullanıcıya ait olan veya belirli bir oturuma ait olan işlemleri döndürmek için filtrelenebilir.
SELECT
DB_NAME(dbid) as DBName,
COUNT(dbid) as NumberOfConnections,
loginame as LoginName
FROM
sys.sysprocesses
WHERE
dbid > 0
GROUP BY
dbid, loginame
;
Ayrıca sys.sysprocesses için Microsoft belgelerine bakın .
hostname
için SELECT
ve GROUP BY
maddelerine eklemenizi öneririz. Ayrıca sadece Msft yazım hatası fark ettim loginame
- bu sütun isimleri 8 karakter ile sınırlı olduğu bir eser mi? lol
ORDER BY 1, 2 DESC, 3
Bunun dışında sp_who
, sp_who2
size daha ayrıntılı bilgi veren "belgelenmemiş" sistem saklı yordamını da kullanabilirsiniz . Bkz . Sp_who ve sp_who2 arasındaki fark .
Araç çubuğundaki "etkinlik izleyici" simgesini tıklayın ...
Thorsten'in yorumlarından:
SQL Server Management Studio'da Sunucu'ya sağ tıklayın, bağlam menüsünden "Etkinlik Monitörü" nü seçin -veya- Ctrl+ Alt+ klavye kısayolunu kullanın A.
Aşağıda, bir veritabanına bağlı tüm oturumları bulmak için komut dosyam var ve bu oturumların herhangi bir G / Ç yapıp yapmadığını ve bunları öldürmek için bir seçenek olup olmadığını kontrol edebilirsiniz.
Komut dosyası ayrıca her oturumun durumunu gösterir.
Aşağıya bir göz atın.
--==============================================================================
-- 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
--==============================================================================
Bunu bir araya getirdim, böylece sonuçlarda bazı sorgulamalar yapabilirsin
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
MS'in KILL
komutun kullanımını açıklayan sorgusu , bağlantı bilgilerinin sağlanması açısından oldukça kullanışlıdır:
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;