我使用SQL Server 2008企业。我想看到任何活动的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
;

请参见Microsoft文档中的sys.sysprocesses。

其他回答

执行的T-SQL命令如下:

SELECT * FROM sys.dm_exec_sessions WHERE status = 'running';

您可以使用sp_who存储过程。

在Microsoft SQL Server数据库引擎实例中提供有关当前用户、会话和进程的信息。可以对信息进行筛选,以只返回那些不空闲的进程、属于特定用户的进程或属于特定会话的进程。

除了sp_who之外,还可以使用“无文档记录的”sp_who2系统存储过程,它可以提供更详细的信息。参见sp_who和sp_who2的区别。

MS的查询解释了KILL命令的使用,提供了连接的信息,非常有用:

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;
SELECT 
    DB_NAME(dbid) as DBName, 
    COUNT(dbid) as NumberOfConnections,
    loginame as LoginName
FROM
    sys.sysprocesses
WHERE 
    dbid > 0
GROUP BY 
    dbid, loginame
;

请参见Microsoft文档中的sys.sysprocesses。