0

我想在重启实例之前获取活动用户会话数,排除任何后台会话。

只是想使用以下查询,但我不确定如何通过 SQL Server 排除 tempdb 的选择会话。

SELECT COUNT(*) FROM sys.dm_exec_requests WHERE session_id in (select session_id from sys.dm_exec_sessions where status = 'running')

任何建议将再次受到赞赏。

4

2 回答 2

0

如果您只需要活动用户会话并排除 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')
于 2018-07-03T07:36:02.740 回答
0

非常感谢您的及时回复,德米特里 :) 我可以按如下方式实现;

set StrSQL="SET NoCount ON;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' and session_id < > @@spid)"
for /F %%A in ('sqlcmd -Q%StrSQL% %CONN_PARAM%') do set USER_SESSION_CNT=%%A
echo Current User Session Cnt:%USER_SESSION_CNT%

如果 %USER_SESSION_CNT% gtr 0 转到 WARNING_USER_SESSION

然后,跳过重启任务。非常感谢大家的支持。

于 2018-07-03T08:29:28.617 回答