Как удалить базу данных SQL Server, которая не входила в систему более 30 дней - PullRequest
0 голосов
/ 06 мая 2019

У меня 3 экземпляра SQL Server, работающих на 3 разных серверах. Я хочу иметь возможность автоматически отбрасывать любую базу данных, в которой не было входа более 30 дней. Я пытаюсь сделать это в power-shell, см. Код ниже:

$SQLInstances = "sql2016", "sql2014", "sql2012"

$SQLQuery = "SELECT * FROM sys.databases  WHERE name not in  ('tempdb','model', 'msdb', 'master','EVN') and name not like '%report%'"

foreach($sqLInstance in $SQLInstances) {

    $ListOfDatabases = Invoke-Sqlcmd -ServerInstance $sqLInstance -Database "master" -Query $SQLQuery

    ForEach ($Database in $ListOfDatabases ) {

    Invoke-Sqlcmd -ServerInstance $sqLInstance -Database "$Database" -Query "IF (SELECT * FROM sys.dm_exec_sessions WHERE DATEDIFF(day, LOGIN_TIME , GETDATE()) > 30 ) 

        BEGIN

        DROP DATABASE $Database

        END "

    }


}

Я застрял на том, как отбросить базы данных. Последнее, что мне нужно, это отправить электронное письмо со списком баз данных, которые будут / были отброшены.

Любые предложения о том, как должен выглядеть мой код?

1 Ответ

0 голосов
/ 06 мая 2019

Точная вещь, которая вам нужна, упоминается в этой статье.

Вы можете найти неиспользуемую БД на основе количества соединений и времени входа в систему.

Вы можете запланировать его как задание SQL, поэтому вам не нужно внешнее планирование и PowerShell для управления им.

Существует возможность отправить электронное письмо из Stored Procudure. Вам просто нужно настроить данные SMTP для исходящего сообщения электронной почты.

https://www.mssqltips.com/sqlservertip/3171/identify-sql-server-databases-that-are-no-longer-in-use/

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