如何查找 SQL Server 数据库是否在使用中?

MAN*_*ARY 8 sql-server

我需要写什么查询才能知道数据库是否在使用中?我试过以下查询

SELECT
    name 
FROM 
    sys.databases 
WHERE 
    state != 0;
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

我想检查那里应该没有与该数据库的开放连接,并且不应该对该数据库执行查询

Rem*_*anu 12

为了使用数据库,任何会话都必须首先获得对它的锁,通常是共享锁。所以只需寻找这样的锁:

select * 
from sys.dm_tran_locks 
where resource_type = 'DATABASE' 
and resource_database_id = <dbid>;
Run Code Online (Sandbox Code Playgroud)


Sha*_*nky 3

虽然发布了很多答案,但我想发布非技术性的答案,但肯定会告诉您是否使用数据库。恕我直言,没有完美和绝对的方法。你能做的是

  1. 您需要使用上述所有方法(特别是 Remus 建议的方法)来查看并了解上次访问它的时间。

  2. 假设在一家大公司中,您想要弄清楚数据库 A 是否正在使用以及谁在使用它。首先向所有需要的利益相关者、经理和应用程序所有者发送一封邮件,告知您将让数据库 A 脱机,因为您认为不再使用该数据库。确保将所有人都包括在内,然后等待一天,以便人们回复您的邮件。如果没有人恢复take full backup of the database并使数据库脱机(不要删除它)。再等一周或一个月。您可以这样做,因为您已经使数据库脱机,并且它不会对服务器造成任何负载。是的,可能每月运行一次需要该数据库的作业,所以我添加了等待一个月。即使一个月后,如果没有人恢复,请继续做任何你想做的事。

同时,如果人们抱怨任何事情,你知道谁或哪个团队可能在使用它,然后你可以进一步讨论。

即使在离线一个月后,有人来抱怨说某些工作失败了,因为你让数据库离线了,你完全可以说你很早之前就已经发过邮件了,现在抱怨是没有意义的。在所有情况下,您都会知道谁在访问以及何时访问。

PS:这是在参考网上提供的各种解决方案后亲自尝试的方法,它对我来说非常有效。