如何找出连接使用的数据库?

时间:2010-11-15 12:34:22

标签: sql sql-server database

我正在使用SQL Server 2008。

我正在尝试找出我的数据库服务器中的哪个连接正在使用我要删除的数据库,以便我可以终止该连接。

我可以select session_id, login_name from sys.dm_exec_sessions等在数据库中查找会话,但是如何从session_id到达会话所连接的数据库?

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

找出某个数据库上存在多少个连接的另一种方法是调用存储过程:

sp_who2 active - 用于活动进程

sp_who2 - 所有进程

答案 2 :(得分:0)

您需要与sys.sysprocesses表联接以找到数据库。然后,您可以使用db_name函数来获取名称。

下面是一个示例,显示了过去24小时内所有连接的(imho)最相关字段

select 
    db_name(p.dbid),
    s.program_name, c.client_net_address, s.client_interface_name, s.host_name, s.login_name, s.nt_user_name, 
    c.connect_time, c.auth_scheme, c.local_net_address, c.local_tcp_port
FROM 
    sys.dm_exec_sessions s
    join sys.dm_exec_connections c ON s.session_id = c.session_id
    join sys.sysprocesses p on p.spid = c.session_id
where
    and connect_time > DATEADD(day,-1, GETDATE())
order by c.connect_time desc