2010-02-03 59 views
1

在我們公司的SQL服務器上,有一堆似乎沒有使用的數據庫。有沒有一種方法可以確定上次某人使用某個特定數據庫,連接到該數據庫或對其執行查詢?不活動的數據庫

回答

3

我不認爲每個數據庫統計都有上次使用的日期。

您可以執行的操作是將SQL Server分析器附加到數據庫,並使用數據庫名稱過濾器。你可以讓這個運行幾個星期,看看是否有任何活動。

另一個選項是檢查數據庫屬性 - >報告 - >標準報告 - >索引使用統計。如果任何索引的最後一次使用都很舊,那麼這就很好地表明數據庫沒有被使用。

或者,看看SQL Server Auditing。我沒有用過它,但看起來它可能適合您的需求。

+1

+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

+0

你應該把鏈接放在Aaron的帖子上作爲答案 - 我會說這是最好的海報會得到。 – Andrew 2010-02-03 17:42:16

1

這實際上是我使用的查詢。它會告訴你自從上次重新啓動以來最後一次使用的數據庫。它給出了上次使用的日期和上次使用的日期。這應該是你需要的。它是動態的,可以在任何服務器上工作,因爲它使用系統視圖。在主數據庫上運行它。

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)