2010-02-03 4 views
1

우리 회사의 SQL 서버에는 사용하지 않는 데이터베이스가 많이 있습니다. 마지막으로 누군가가 특정 db를 사용하거나, 연결하거나, 쿼리를 실행 한 시간을 결정하는 방법이 있습니까?비활성 데이터베이스

답변

3

마지막으로 사용한 날짜에 대한 데이터베이스 별 통계가 없다고 생각합니다.

데이터베이스 이름에 필터를 사용하여 SQL Server 프로파일 러를 데이터베이스에 연결할 수 있습니다. 이 프로그램을 몇 주 동안 운영 상태로두고 활동이 있는지 확인할 수 있습니다.

또 다른 옵션은 데이터베이스 특성 -> 보고서 -> 표준 보고서 -> 색인 사용 통계를 점검하는 것입니다. 인덱스의 마지막 사용이 매우 오래된 경우 데이터베이스가 사용되지 않고 있음을 나타내는 좋은 지표입니다.

또는 SQL Server Auditing을 살펴보십시오. 나는 그것을 사용하지 않았지만 그것이 당신의 필요에 부합하는 것처럼 보입니다.

+1

한 - 바로이 주제에 아론 버트 랜드의 블로그 게시물에서 볼 가치 : http://sqlblog.com/blogs/aaron_bertrand/archive/2008/05/06/when-was-my-database- table-last-accessible.aspx – AdaTheDev

+0

답변으로 Aaron의 게시물에 대한 링크를 넣어 두어야합니다. 포스터를 얻는 것이 가장 좋았을 것입니다. – Andrew

1

실제로 내가 사용하는 쿼리입니다. 마지막으로 다시 시작한 이후 DB가 마지막으로 사용 된 항목을 알려줍니다. 그것은 마지막으로 사용한 날짜와 마지막으로 사용한 이후의 날짜를 제공합니다. 이것은 당신이 필요로하는 것이어야합니다. 동적이며 시스템보기를 사용하기 때문에 모든 서버에서 작동합니다. 마스터 DB에서 실행하십시오.

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)