Как обнаружить активный пользовательский сеанс по sqlcmd - PullRequest
0 голосов
/ 03 июля 2018

Я хотел бы узнать количество активных сессий пользователя перед перезагрузкой экземпляра, исключая любые фоновые сеансы.

Просто думаю использовать следующий запрос, но я не уверен, как исключить сеанс выбора для базы данных tempdb SQL Server.

ВЫБРАТЬ СЧЕТЧИК (*) ОТ sys.dm_exec_requests ГДЕ session_id в (выберите идентификатор_сессии из sys.dm_exec_sessions, где status = 'выполняется')

Любой совет будет признателен снова.

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Большое спасибо за ваш быстрый ответ, Дмитрий :) Я мог бы добиться этого следующим образом;

set StrSQL = "SET NoCount ON; SELECT COUNT (*) ОТ sys.dm_exec_requests WHERE database_id <> DB_ID ('tempdb') и session_id в (выберите session_id из sys.dm_exec_sessions, где is_user_process = 1 и status = 'running' и session_id <> @@ spid) "
для / F %% A in ('sqlcmd -Q% StrSQL%% CONN_PARAM%') установите USER_SESSION_CNT = %% A
echo Текущий сеанс пользователя Cnt :% USER_SESSION_CNT%

если% USER_SESSION_CNT% гтп 0 перейти к WARNING_USER_SESSION

Затем пропустите задачу перезагрузки. Большое спасибо за вашу поддержку.

0 голосов
/ 03 июля 2018

Если вам нужны только активные сеансы пользователя и исключить сеансы для базы данных tempdb

Попробуйте это

select count(*) FROM sys.dm_exec_requests 
where 
    database_id <> DB_ID('tempdb') 
    and 
    session_id in 
        (select session_id from sys.dm_exec_sessions where is_user_process = 1 and status='running')
...