drop table dba..
full_latest_backup_details
-- Query to find latest "Full" as well as "T-Log" backup of all specified Databases
-- Query to find latest "Full" as well as "T-Log" backup of all specified Databases
USE DBA
GO
SELECT [Link].server_name
,[Link].database_name
,CASE [Link].[type] -- Let's decode the main types of backup here
WHEN 'D'
THEN 'Full'
WHEN 'I'
THEN 'Differential'
WHEN 'L'
THEN 'Transaction Log'
WHEN 'F'
THEN 'File or filegroup'
WHEN 'G'
THEN 'Differential file'
WHEN 'P'
THEN 'Partial'
WHEN 'Q'
THEN 'Differential partial'
ELSE [Link].[type]
END AS BackupType
, [Link].backup_finish_date as Latest_backup_Date
,CAST((CAST(DATEDIFF(s, [Link].backup_start_date,
[Link].backup_finish_date) AS INT)) / 3600 AS VARCHAR) + ' hours, ' +
CAST((CAST(DATEDIFF(s, [Link].backup_start_date,
[Link].backup_finish_date) AS INT)) / 60 AS VARCHAR) + ' minutes, ' +
CAST((CAST(DATEDIFF(s, [Link].backup_start_date,
[Link].backup_finish_date) AS INT)) % 60 AS VARCHAR) + ' seconds' AS
[Total_Time_Taken_For_Backup]
,[Link].physical_device_name AS Backup_File_Location
into dba..full_latest_backup_details
FROM [Link]
INNER JOIN [Link] ON [Link].media_set_id =
[Link].media_set_id
WHERE (
backup_set_ID IN (
SELECT MAX(backup_set_id)
FROM [Link]
WHERE [Link].[type] = 'D'
GROUP BY database_name
OR backup_set_ID IN (
SELECT MAX(backup_set_id)
FROM [Link]
WHERE [Link].[type] = 'L'
GROUP BY database_name
) OR
backup_set_ID IN (
SELECT MAX(backup_set_id)
FROM [Link]
WHERE [Link].[type] = 'I'
GROUP BY database_name
ORDER BY [Link].database_name
,BackupType
GO
ALTER TABLE dba..full_latest_backup_details
ADD backup_status VARCHAR(20)
go
declare cur1 cursor for SELECT name FROM [Link] where is_read_only<>1
declare @db15 varchar(90)
open cur1
fetch next from cur1 into @db15
while @@fetch_status=0
begin
declare cur cursor for select Latest_Backup_date,database_name from
dba..full_latest_backup_details where BackupType like 'full%' and database_name
=@db15
declare @db13 varchar(90)
declare @db14 varchar(90)
declare @db12 varchar(90)
open cur
fetch next from cur into @db13,@db12
while @@fetch_status=0
begin
--declare @db14 date
set @db14=(select getdate()-6)
print @db14
update dba..full_latest_backup_details set
backup_status='success' where database_name =@db12 and Latest_Backup_date >=@db14
update dba..full_latest_backup_details set
backup_status='failure' where database_name =@db12 and Latest_Backup_date < @db14
fetch next from cur into @db13,@db12
end
close cur
deallocate cur
fetch next from cur1 into @db15
end
update
dba..full_latest_backup_details set backup_status='NA' where backup_status='NULL'
close cur1
deallocate cur1
select * from dba..full_latest_backup_details where BackupType like
'full%' and server_name = @@servername and backup_status='failure'-- and
database_name not in('')
--select * from dba..full_latest_backup_details where BackupType
like 'full%' and server_name = @@servername and backup_status='success'
declare @var int
set @var=( select count(*) from
dba..full_latest_backup_details where BackupType like 'full%' and server_name =
@@servername and backup_status='failure') --and database_name not in('Dickies)
if @var >= 1
begin
DECLARE @xml NVARCHAR(MAX)
DECLARE @body NVARCHAR(MAX)
SET @xml = CAST(( SELECT server_name AS 'td','',database_name AS 'td','',
BackupType AS 'td','', Latest_Backup_date AS 'td','', Total_Time_Taken_For_Backup
AS 'td','', Backup_File_Location AS 'td','', Backup_status AS 'td'
FROM dba..full_latest_backup_details where BackupType like '%full%' and server_name
= @@servername and backup_status ='failure' and database_name not
in('mosaic','Staging')
FOR XML PATH('tr'), ELEMENTS ) AS NVARCHAR(MAX))
SET @body ='<html><body><H3>*IMP* IMMEDIATE ACTION REQUIRED - SQL SERVER DATABASES
-FULL BACKUP FAILURE REPORT</H3>
<table border = 1>
<tr>
<th> server_name </th> <th> database_name </th> <th> BackupType </th> <th>
Latest_Backup_date </th><th> Total_Time_Taken_For_Backup </th><th>
Backup_File_Location </th><th> Backup_Status </th></tr>'
SET @body = @body + @xml +'</table></body></html>'
EXEC [Link].sp_send_dbmail
@profile_name='DBA',
-- replace with your SQL Database Mail Profile
@body = @body,
@body_format ='HTML',
@recipients ='hari_prasad@[Link];ksft-vfc-dba@[Link]', -- replace with your
email address
--ksft-vfc-dba@[Link]
@subject = '*IMP* IMMEDIATE ACTION REQUIRED - SQL SERVER DATABASES -FULL BACKUP
FAILURE REPORT ' ;
end