Базы данных SQL Server не доступны в течение 1 месяца - PullRequest
0 голосов
/ 10 октября 2018

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

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

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

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

SELECT
    DB_NAME(sd.database_id) AS DatabaseName,
    COALESCE(MAX(ius.last_user_seek), MAX(ius.last_user_scan),
             MAX(ius.last_user_lookup), MAX(ius.last_user_update), '1/1/1900') AS LastAccessDate,
    (SELECT create_date 
     FROM sys.databases 
     WHERE name = 'tempdb') AS LastServerRestart
FROM 
    sys.databases sd
LEFT JOIN
    sys.dm_db_index_usage_stats ius ON ius.database_id = sd.database_id
WHERE 
    DB_NAME(sd.database_id) NOT IN ('tempdb', 'master', 'model', 'msdb')
GROUP BY 
    sd.database_id
ORDER BY 
    DatabaseName

Вот результаты этого запроса:

DatabaseName            LastAccessDate             LastServerRestart
--------------------------------------------------------------------------
AdventureWorks2016      2018-09-12 18:21:21.800    2018-09-12 18:21:10.727
AdventureWorksDW2016    2018-10-10 09:40:31.903    2018-09-12 18:21:10.727
Drake_Test              1900-01-01 00:00:00.000    2018-09-12 18:21:10.727
OLD_DB                  1900-01-01 00:00:00.000    2018-09-12 18:21:10.727
Drake_Test_new          2018-10-10 14:20:17.943    2018-09-12 18:21:10.727

На основании этих результатов я бы хотел, чтобы только Drake_Test и OLD_DB были возвращены из этого запроса.Другие 3 базы данных были доступны за последние 30 дней.

Кроме того, основная проблема с изменением моего запроса T-SQL заключается в том, что когда я пытаюсь использовать столбец LastAccessDate как часть предложения, он говорит, что это недопустимый столбец?

1 Ответ

0 голосов
/ 10 октября 2018

Мне нравится использовать CTE для такого рода вещей:

WITH CTE AS (
     SELECT DB_NAME(sd.database_id) AS DatabaseName,
            COALESCE(
               MAX(ius.last_user_seek),
               MAX(ius.last_user_scan),
               MAX(ius.last_user_lookup),
               MAX(ius.last_user_update),
               '1/1/1900') AS LastAccessDate,
               (SELECT create_date FROM sys.databases WHERE name = 'tempdb') AS LastServerRestart
     FROM sys.databases sd
     LEFT JOIN sys.dm_db_index_usage_stats ius on ius.database_id = sd.database_id
     WHERE DB_NAME(sd.database_id) NOT IN('tempdb', 'master', 'model', 'msdb')
     GROUP BY sd.database_id)

SELECT *
FROM CTE
WHERE LastAccessDate < DATEADD(DAY,-30,GETDATE())
ORDER BY DatabaseName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...