Запланированные отчеты SQL Server по почте - PullRequest
0 голосов
/ 03 сентября 2018

Я использую SQL Server 2008 Express, и мой вопрос: есть ли способ создавать ежедневные отчеты, которые будут рассчитывать пространство, доступное для каждой базы данных, и отправлять этот отчет на один конкретный адрес электронной почты? Формат отчета вообще не имеет значения, как я могу это сделать? Спасибо за все советы

1 Ответ

0 голосов
/ 03 сентября 2018

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

Ниже приведен скрипт Powershell, который использует sqlcmd для получения данных, а затем использует Send-MailMessage. Я не использовал Invoke-sqlcmd, так как я не установил в офисе. Я уверен, что кто-то может показать, как это использовать. Вам нужно установить учетные данные / настройки сервера для вашего почтового сервера:

$Query = "
DECLARE @SQL nvarchar(MAX) = N'USE ?' + NCHAR(10) +
                             N'INSERT INTO ##Files(DatabaseName, DBFile, SizeMB, SpaceUsed)' + NCHAR(10) +
                             N'SELECT ''?'', [name] AS DBFile, Size, FILEPROPERTY(name,''SpaceUsed'') AS SpaceUsed' + NCHAR(10) +
                             N'FROM sys.database_files' + NCHAR(10) +
                             N'WHERE Type_desc = ''ROWS'';';

EXEC sys.sp_MSforeachdb @command1 = @SQL,
                        @precommand = N'CREATE TABLE ##Files(DatabaseName sysname, DBFile sysname, SizeMB int, SpaceUsed int);',
                        @postcommand = N'SELECT DatabaseName, SUM(SizeMB) AS Size, SUM(SpaceUsed) AS SpaceUsed, SUM(SizeMB - SpaceUsed) AS FreeSpace FROM ##Files GROUP BY DatabaseName; DROP TABLE ##Files;';"

$databases = sqlcmd -S YourSQLServer -E -d master -Q "$Query"  -s "," -W | Out-String
Write-Host $databases
Send-MailMessage -From "FromAddress@YourDomain.com" -To "ToAddress@YourDomain.com" -Subject "DB Space Remaining" -Body "$databases" -SmtpServer exchange 

Обратите внимание, что здесь также использовалась процедура без документов sp_MSforeachdb.

...