不活动的数据库
答
我不认为每个数据库统计都有上次使用的日期。
您可以执行的操作是将SQL Server分析器附加到数据库,并使用数据库名称过滤器。你可以让这个运行几个星期,看看是否有任何活动。
另一个选项是检查数据库属性 - >报告 - >标准报告 - >索引使用统计。如果任何索引的最后一次使用都很旧,那么这就很好地表明数据库没有被使用。
或者,看看SQL Server Auditing。我没有用过它,但看起来它可能适合您的需求。
答
这实际上是我使用的查询。它会告诉你自从上次重新启动以来最后一次使用的数据库。它给出了上次使用的日期和上次使用的日期。这应该是你需要的。它是动态的,可以在任何服务器上工作,因为它使用系统视图。在主数据库上运行它。
DECLARE @RESTART DATETIME
SELECT @RESTART = login_time
FROM sysprocesses
WHERE spid = 1
SELECT @@SERVERNAME AS SERVER_NAME
,DB_NAME(db.database_id) AS 'DATABASE'
, db.state_desc AS 'State'
, @RESTART AS 'SYSTEM_RESTART'
, MAX(coalesce(us.last_user_seek, us.last_user_scan, us.last_user_lookup,@RESTART)) AS 'LAST_USE'
,CASE
WHEN DATEDIFF(DAY,@RESTART, MAX(coalesce(us.last_user_seek, us.last_user_scan, us.last_user_lookup,@RESTART))) = 0
THEN 'Prior to restart ' + CONVERT(VARCHAR(5),DATEDIFF(DAY,MAX(coalesce(us.last_user_seek, us.last_user_scan, us.last_user_lookup,@RESTART)), CURRENT_TIMESTAMP)) +' days ago'
ELSE CONVERT(VARCHAR(5),DATEDIFF(DAY,MAX(coalesce(us.last_user_seek, us.last_user_scan, us.last_user_lookup,@RESTART)), CURRENT_TIMESTAMP))
END AS 'DAYS_SINCE_LAST_USE'
FROM sys.databases db
LEFT OUTER JOIN sys.dm_db_index_usage_stats us ON db.database_id = us.database_id
/* IF you want to exclude offlinbe Dbs in your output
then remove the comment '--AND STATE != 6' below.
*/
WHERE db.database_id > 4 --AND STATE != 6
GROUP BY DB_NAME(db.database_id), db.state_desc
ORDER BY DB_NAME(db.database_id)
+1 - 值得一看就这个题目阿龙贝特朗的博客文章:http://sqlblog.com/blogs/aaron_bertrand/archive/2008/05/06/when-was-my-database- table-last-accessible.aspx – AdaTheDev 2010-02-03 17:39:24
你应该把链接放在Aaron的帖子上作为答案 - 我会说这是最好的海报会得到。 – Andrew 2010-02-03 17:42:16