SQL Server 2000/5 - скрипт для получения списка активных или неактивных баз данных (кроме системных) - PullRequest
0 голосов
/ 28 января 2009

Мне нужна помощь, чтобы написать сценарий для всех баз данных на сервере SQL 2005 и, возможно, просмотреть их активность (в частности, дату последней активности). Мне нужно удалить все базы данных, которые НЕ активны на сервере.

Ответы [ 4 ]

2 голосов
/ 28 января 2009

Лучший способ сделать это - запустить очень легкую трассировку профилировщика на вашем сервере и регистрировать только события «Audit Login». Оставьте это включенным на неделю / месяц / что угодно, а затем просмотрите журнал трассировки, чтобы увидеть, какие базы данных используются в настоящее время. Если вы выполните запрос, вы увидите только используемые текущие базы данных, а не то, что использовалось за последнюю неделю / месяц.

1 голос
/ 28 января 2009

Вот хитрость: используйте динамическое административное представление SQL Server, чтобы получить данные о том, какие индексы были использованы.

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

SELECT db.[name] AS DatabaseName
, (SELECT TOP 1 last_user_seek FROM sys.dm_db_index_usage_stats ix1 WHERE ix1.database_id = db.database_id ORDER BY last_user_seek DESC) AS last_user_seek
, (SELECT TOP 1 last_user_scan FROM sys.dm_db_index_usage_stats ix1 WHERE ix1.database_id = db.database_id ORDER BY last_user_scan DESC) AS last_user_scan
, (SELECT TOP 1 last_user_lookup FROM sys.dm_db_index_usage_stats ix1 WHERE ix1.database_id = db.database_id ORDER BY last_user_lookup DESC) AS last_user_lookup
, (SELECT TOP 1 last_user_update FROM sys.dm_db_index_usage_stats ix1 WHERE ix1.database_id = db.database_id ORDER BY last_user_update DESC) AS last_user_update
FROM sys.databases db
ORDER BY db.[name]

Одно предупреждение: если у вас есть планы обслуживания, настроенные на регулярную автоматическую переиндексацию ваших баз данных, или стороннюю программу дефрагментации, то эти даты могут быть искусственно недавно.

0 голосов
/ 28 января 2009

Запрос по активным базам данных может быть уточнен следующим образом

SELECT  name
FROM    master..sysdatabases
WHERE   DATABASEPROPERTY(name, 'IsOffline') = 0 
AND     DATABASEPROPERTY(name, 'IsReadOnly') = 0
AND     DATABASEPROPERTY(name, 'IsDetached') = 0
AND     DATALENGTH(sid) > 1
ORDER BY name
0 голосов
/ 28 января 2009

Вы можете начать с

select  name from sysdatabases
where sid <> 0x01

и затем выполните sp_helpdb для каждого возвращенного имени базы данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...