How to Send Database Backup Report Daily by a Job
Send Database backup report daily by a Job. Here we will use a TSQL script for the activity. The script will create two temporary tables for the activity and use Database mail profile to send the report via email.
Steps
1) First Configure Database mail in SQL Server if it is not configured before. You can follow the link for instruction: https://www.ourtechideas.com/blog/configure-database-mail/
2) Create a Job for the activity & schedule as per your requirement
3) Modify the script & use it in the Job
- Must modify in the script
- Email Sender Name
- DB Mail Profile
- Recipients Email
- Copy Recipients Email
TSQL Script
SET NOCOUNT ON IF OBJECT_ID('tempdb..#LastBackUp') IS NOT NULL DROP TABLE #LastBackUp; IF OBJECT_ID('tempdb..#CSREPORT') IS NOT NULL DROP TABLE #CSREPORT; SELECT bs.database_name, bs.compressed_backup_size, bs.backup_start_date, bs.BACKUP_FINISH_DATE, bmf.physical_device_name, Position = ROW_NUMBER() OVER( PARTITION BY bs.database_name,bs.[type] ORDER BY bs.backup_start_date DESC ),d.recovery_model_desc,bs.[type] into #LastBackUp FROM msdb.dbo.backupmediafamily bmf JOIN msdb.dbo.backupmediaset bms ON bmf.media_set_id = bms.media_set_id JOIN msdb.dbo.backupset bs ON bms.media_set_id = bs.media_set_id INNER JOIN master.SYS.databases d on d.name=bs.database_name WHERE d.state_desc = 'ONLINE' AND d.is_read_only = 0 AND d.source_database_id IS NULL and ISNULL(bs.backup_finish_date, GETDATE()-1) > GETDATE() - 3 SELECT @@servername as servername, CASE WHEN ISNULL((backup_finish_date), GETDATE()-10000) < GETDATE()-31 AND [type] = 'D' THEN 'FAILED' WHEN ISNULL((backup_finish_date), GETDATE()-10000) < GETDATE()-1 AND [type] = 'I' THEN 'FAILED' WHEN ISNULL((backup_finish_date), GETDATE()-10000) < GETDATE()-1 AND [type] = 'L' THEN 'FAILED' WHEN [type] IS NULL THEN 'FAILED' ELSE 'BACKUP SUCCESS' END AS BackupStatus, datediff(d, (backup_finish_date), getdate()) as 'full_dayssincelast', CASE WHEN [type] = 'D' THEN 'Full Backup' WHEN [type] = 'I' THEN 'Differential Backup' WHEN [type] = 'L' THEN 'Transaction Log Backup' END AS BackupType, database_name as databasename , recovery_model_desc AS RecoveryMode, backup_start_date, BACKUP_FINISH_DATE, CAST((compressed_backup_size) / 1048576 AS DECIMAL(10, 2) ) AS backup_size_mb, physical_device_name as path, GETDATE() as insert_date INTO #CSREPORT FROM #LastBackUp ORDER BY backup_finish_date desc DECLARE @tableHTML NVARCHAR(MAX) ; declare @servername varchar(max) set @servername=@@SERVERNAME SET @tableHTML = N'<H2>Database Backup Status </H2>' + N'<table border="1" Cellspacing="0" cellpadding="0" style="font-size:x-small;">' + N'<tr style="background-color:#999999;color:black;font-weight:bold;" align="center"> <td>ServerName</td>' + N'<td>BackupStatus</td>' + N'<td> BackupType</td>' + N'<td> Databasename</td>' + N'<td> RecoveryMode</td>' + N'<td> Backup_start_date</td>' + N'<td> BACKUP_FINISH_DATE</td>' + N'<td>Backup_size_mb</td>' + N'<td> Path</td></tr>' + CAST ( ( SELECT td = ServerName,'', td = BackupStatus,'', td = BackupType,'', td = Databasename,'', td = RecoveryMode,'', td = Backup_start_date,'', td = BACKUP_FINISH_DATE,'', td = Backup_size_mb,'', td = Path,'' FROM #CSREPORT FOR XML PATH('tr'), TYPE ) AS NVARCHAR(MAX) )+ N'</table>' + N'<BR><BR><BR><BR><BR>Thanks<BR> Sanjay Humania<BR><BR><BR><BR><BR>' ; -- Email Sender Name if (select count(*) FROM #CSREPORT) > 0 Begin declare @sqlstr varchar (500) set @sqlstr = 'Database Backup Information '+ @servername EXEC msdb.dbo.sp_send_dbmail @profile_name = 'SQL_DB_Email', -- DB Mail Profile @recipients='sanjay.humania@gmail.com', -- Recipients Email @copy_recipients = 'sanjayhumania@gmail.com', -- Copy Recipients Email @subject = @sqlstr, @body = @tableHTML, @body_format = 'HTML' ; End
TSQL Script is collected from internet, 100% working
Download: Backup Report via Email Script