활성 SQL Server 연결을 확인하려면 어떻게 해야 합니까?
SQL Server 2008 Enterprise를 사용하고 있습니다.활성 SQL Server 연결 및 모든 연결의 관련 정보(예: IP 주소에서 어떤 데이터베이스로 연결되는지)를 확인합니다.
이 문제를 해결하기 위한 기존 명령어가 있습니까?
SELECT
DB_NAME(dbid) as DBName,
COUNT(dbid) as NumberOfConnections,
loginame as LoginName
FROM
sys.sysprocesses
WHERE
dbid > 0
GROUP BY
dbid, loginame
;
sys.sysprocesses 에 대해서는, Microsoft 의 메뉴얼도 참조해 주세요.
저장 프로시저를 사용할 수 있습니다.
Microsoft SQL Server Database Engine 인스턴스의 현재 사용자, 세션 및 프로세스에 대한 정보를 제공합니다.정보를 필터링하여 아이돌 상태가 아닌 프로세스, 특정 사용자에게 속한 프로세스 또는 특정 세션에 속한 프로세스만 반환할 수 있습니다.
이외에는sp_who, 「서류 첨부」를 사용할 수도 있습니다.sp_who2자세한 정보를 제공하는 시스템 저장 프로시저를 참조하십시오.sp_who와 sp_who2의 차이를 참조하십시오.
도구 모음에서 "활동 모니터" 아이콘을 클릭합니다.
SQL Server Management Studio에서 Server를 오른쪽 클릭하여 컨텍스트메뉴에서 [Activity Monitor]를 선택하거나 키보드숏컷 + 를 사용합니다.
레퍼런스:Microsoft Docs - SQL Server Management Studio(SSMS)에서 액티비티 모니터를 엽니다.
아래는 데이터베이스에 연결된 모든 세션을 검색하기 위한 스크립트입니다.이러한 세션이 I/O를 실행하고 있는지 여부를 확인할 수 있습니다.또, 이러한 세션을 종료하는 옵션이 있습니다.
스크립트에는 각 세션의 상태도 표시됩니다.
아래를 보세요.
--==============================================================================
-- 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
--==============================================================================
업데이트 2022년 1월 20일
sys.dm_tran_tran을 사용하는 더 나은 버전이 있습니다.이것은 특히 모든 사용자가 특정 데이터베이스에서 벗어나야 할 때 유용합니다.그래서 이 파라미터가 있습니다.@dbname
누군가가 SSMS를 열고 데이터베이스에 연결하기만 해도 이 쿼리에 표시됩니다.
DECLARE @dbname SYSNAME =NULL
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
,DatabaseName = COALESCE( db_name(sdes.database_id), N'')
,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_tran_locks t
INNER JOIN sys.dm_exec_sessions sdes
ON t.request_session_id = sdes.session_id
LEFT OUTER JOIN sys.dm_exec_connections AS sdec
ON sdec.session_id = sdes.session_id
OUTER 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 t.resource_type = 'database'
and t.resource_database_id = CASE WHEN @dbname IS NULL
THEN t.resource_database_id
ELSE DB_ID(@dbname)
END
and t.request_type = 'LOCK'
and t.request_status = 'GRANT'
명령어 사용을 설명하는 MS의 쿼리는 연결 정보를 제공하는 데 매우 유용합니다.
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;
당신이 결과를 조회할 수 있도록 이걸 합친 겁니다
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
다음 T-SQL 명령을 수행할 수 있습니다.
SELECT * FROM sys.dm_exec_sessions WHERE status = 'running';
언급URL : https://stackoverflow.com/questions/1248423/how-do-i-see-active-sql-server-connections
'source' 카테고리의 다른 글
| SQL에서 월의 첫 번째 날을 선택하려면 어떻게 해야 합니까? (0) | 2023.04.07 |
|---|---|
| 에서 무효 또는 예기치 않은 파라미터에 대해 발생하는 예외는 무엇입니까?인터넷? (0) | 2023.04.07 |
| SQL 서버에서 중복 행 찾기 (0) | 2023.04.07 |
| 쉼표로 구분된 값을 열로 분할하는 방법 (0) | 2023.04.07 |
| SQL Server에서 특정 날짜보다 큰 모든 날짜를 조회하려면 어떻게 해야 합니까? (0) | 2023.04.07 |