неактивные базы данных - PullRequest
1 голос
/ 03 февраля 2010

На сервере SQL нашей компании существует множество баз данных, которые, похоже, не используются.Есть ли способ определить, когда в последний раз кто-то использовал конкретную базу данных, подключился к ней или выполнил запрос к ней?

Ответы [ 2 ]

3 голосов
/ 03 февраля 2010

Я не думаю, что есть статистика по каждой базе данных за последнюю использованную дату.

Что вы можете сделать, это подключить SQL Server Profiler к базе данных с фильтром по имени базы данных. Вы можете оставить это включенным на несколько недель и посмотреть, есть ли какие-либо действия.

Другой вариант - проверить свойства базы данных -> Отчеты -> Стандартные отчеты -> Статистика использования индекса. Если последнее использование какого-либо индекса очень старое, это хороший признак того, что база данных не используется.

В качестве альтернативы взгляните на Аудит SQL Server . Я сам этим не пользовался, но, похоже, он подойдет вам.

1 голос
/ 17 июля 2015

Вот на самом деле запрос, который я использую. Он сообщает вам, какая БД использовалась последней с момента последнего перезапуска. В нем указывается дата последнего использования и дни с момента последнего использования. Это должно быть то, что вам нужно. Он динамичен и будет работать на любом сервере, поскольку использует системные представления. Запустите это на главной базе данных.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...