Advertisements
This script will check the last backup taken and notify an alert when there is no backup of given threshold.
Table:
-- drop table tbl_no_full_backup_7days use dbadata drop table tbl_no_full_backup_7days CREATE TABLE [dbo].[tbl_no_full_backup_7days]( serverName varchar(50),databaseName Varchar(100),type varchar(1),last_backup_date datetime, DB_Status sql_variant ) use dbadata_archive go drop table tbl_no_full_backup_7days CREATE TABLE [dbo].[tbl_no_full_backup_7days]( serverName varchar(50),databaseName Varchar(100),type varchar(1),last_backup_date datetime, DB_Status sql_variant,upload_date datetime )
SP:
USE [DBAdata] GO /****** Object: StoredProcedure [dbo].[USP_DBA_No_full_backup] Script Date: 7/6/2015 3:32:45 AM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO /* -- drop table tbl_no_full_backup_7days use dbadata drop table tbl_no_full_backup_7days CREATE TABLE [dbo].[tbl_no_full_backup_7days]( serverName varchar(50),databaseName Varchar(100),type varchar(1),last_backup_date datetime, DB_Status sql_variant ) use dbadata_archive go drop table tbl_no_full_backup_7days CREATE TABLE [dbo].[tbl_no_full_backup_7days]( serverName varchar(50),databaseName Varchar(100),type varchar(1),last_backup_date datetime, DB_Status sql_variant,upload_date datetime ) */ -- SELECT * from DBADATA.DBO.tbl_no_full_backup_7days ALTER PROCEDURE [dbo].[USP_DBA_No_full_backup] /* Summary: Find DB with no full backup Contact: Muthukkumaran Kaliyamoorthy SQL DBA Description: Find DB with no full backup last 7 or 10 days ChangeLog: Date Coder Description 2013-jan-21 Muthukkumaran Kaliyamoorhty Updated the 2012 functionality */ AS BEGIN --SET NOCOUNT ON TRUNCATE TABLE DBADATA.DBO.tbl_no_full_backup_7days DECLARE @SERVERNAME VARCHAR(200) DECLARE @DESC VARCHAR(200) DECLARE @text VARCHAR(1000) -- select * from DBADATA.DBO.DBA_Backup_Non_Location order by backup_date desc --** PUT LOCAL SERVER FIRST. insert into tbl_no_full_backup_7days select @@SERVERNAME,d.name,b.type,max(b.backup_finish_date),DATABASEPROPERTYEX(d.name, 'Status') AS DBStatus from master.dbo.sysdatabases D left outer join msdb.dbo.backupset b on d.name = b.database_name where (b.type ='D' or b.type is null) and d.name not in ('ReportServer','ReportServerTempDB','tempdb') group by d.name,b.type PRINT @@SERVERNAME +' COMPLETED.' DECLARE c_F_BAckup_Location CURSOR FOR -- select ha FROM DBADATA.DBO.DBA_ALL_SERVERS group by ha SELECT SERVERNAME,[DESCRIPTION] FROM DBADATA.DBO.DBA_ALL_SERVERS where ha in ('NO HA') --and [DESCRIPTION] not like '%express%' and [DESCRIPTION] not in ('SSS') and svr_status ='running' and Category in ('LIVE','PROD') OPEN c_F_BAckup_Location FETCH NEXT FROM c_F_BAckup_Location INTO @SERVERNAME,@DESC WHILE @@FETCH_STATUS=0 BEGIN BEGIN TRY set @text = 'EXEC(''SELECT * from OPENQUERY(['+@servername+'], '''' select '''''''''+@Desc+''''''''',d.name,b.type,max(b.backup_finish_date),DATABASEPROPERTYEX(d.name, ''''''''Status'''''''') AS DBStatus from master.dbo.sysdatabases D left outer join msdb.dbo.backupset b on d.name = b.database_name where (b.type =''''''''D'''''''' or b.type is null) and d.name not in (''''''''ReportServer'''''''',''''''''ReportServerTempDB'''''''',''''''''tempdb'''''''') group by d.name,b.type '''')'') ' --print @text insert into tbl_no_full_backup_7days exec (@text) end try BEGIN CATCH --SELECT @SERVER_NAME,ERROR_NUMBER() AS ErrorNumber,ERROR_MESSAGE() AS ErrorMessage; insert into tbl_Error_handling SELECT @DESC,'No_full_BAckup',[Error_Line] = ERROR_LINE(),[Error_Number] = ERROR_NUMBER(), [Error_Severity] = ERROR_SEVERITY(),[Error_State] = ERROR_STATE(), [Error_Message] = ERROR_MESSAGE(),GETDATE() PRINT 'SERVER ['+@SERVERNAME+']is not COMPLETED.' END CATCH FETCH NEXT FROM c_F_BAckup_Location INTO @SERVERNAME,@DESC END CLOSE c_F_BAckup_Location DEALLOCATE c_F_BAckup_Location /* --select * from DBA_ALL_SERVERS where Description='BLRCCRIP02' select * from tbl_no_full_backup_7days where Servername not in (select Description from DBADATA.DBO.DBA_ALL_SERVERS) */ ---------------------------------------------------- -- May be its time to send the report to my DBA IF EXISTS( SELECT 1 FROM DBADATA.DBO.tbl_no_full_backup_7days where DATEADD(day,0,Last_backup_date) < DATEADD(day,-7,getdate()) and servername not in ('SS','SS') and databasename not like '%DBAdata%' and databasename not in('_DB','master','model','msdb') and DB_Status='ONLINE' ) BEGIN DECLARE @SERVER_NAME VARCHAR(100) DECLARE @database_name VARCHAR(100) DECLARE @backup_type VARCHAR(10) DECLARE @CREATE_DATE VARCHAR(50) begin /* declare @day int select @day=datediff(day, last_backup_date, dateadd(day,0, getdate())) from tbl_no_full_backup_7days if (@day>7) SELECT SERVERNAME,databasename,type,last_backup_date, datediff(day, last_backup_date, dateadd(day,0, getdate())) as no_day, DATEADD(day,0,Last_backup_date) , DATEADD(day,-7,getdate()) FROM DBADATA.DBO.tbl_no_full_backup_7days where last_backup_date is not null and servername like '%ip%' order by last_backup_date */ DECLARE c_Last_Full CURSOR FOR SELECT SERVERNAME,databasename,case when type ='D' then 'Full' else 'no full'end ,Last_backup_date FROM DBADATA.DBO.tbl_no_full_backup_7days where DATEADD(day,0,Last_backup_date) < DATEADD(day,-7,getdate()) and servername not in ('SSS','SSS') and databasename not like '%DBAdata%' and databasename not in('_DB','master','model','msdb') and DB_Status='ONLINE' order by Last_backup_date OPEN c_Last_Full FETCH NEXT FROM c_Last_Full INTO @SERVER_NAME,@database_name,@backup_type,@CREATE_DATE DECLARE @BODY1 VARCHAR(max) --#ECE5B6 SET @BODY1= '<font size=2 color=#C35817 face=''verdana''><B>Followings are the databases not having full backup for last 10 days:</b> </font> <P> <font size=1 color=#FF00FF face=''verdana''> <Table border=5 width=1000 bgcolor=#ECE5B6 cellpadding=1 style="color:#7E2217;font-face:verdana;font-size:12px;"> <b> <tr bgcolor=#8A4117 align=center style="color:#FFFFFF;font-weight:bold"> <td width=600 color=white>SERVER NAME</td> <td width=600 color=white>DB Name</td> <td width=100 color=white>Type</td> <td width=600 color=white>Last backup date</td> </b> </tr>' WHILE @@FETCH_STATUS=0 BEGIN SET @BODY1= @BODY1 +'<tr> <td>'+ISNULL(@SERVER_NAME,' ')+'</td>'+ '<td align=center>'+ISNULL(@database_name,' ')+'</td>'+ '<td align=center>'+ISNULL(@backup_type,' ')+'</td>'+ '<td align=center>'+ISNULL(@CREATE_DATE,' ')+'</td>' FETCH NEXT FROM c_Last_Full INTO @SERVER_NAME,@database_name,@backup_type,@CREATE_DATE END SET @BODY1=@BODY1+'</Table> </p> <p> <font style="color:#7E2217;font-face:verdana;font-size:9px;"> Generated on ' +convert(varchar(30),getdate(),100)+'. </BR> This is an auto generated mail by DBA Team. If you receive this email by mistake please contact us. </br> © Property of DBA Team. </font>' CLOSE c_Last_Full DEALLOCATE c_Last_Full DECLARE @EMAILIDS VARCHAR(500) SELECT @EMAILIDS= COALESCE(@EMAILIDS+';','')+EMAIL_ADDRESS FROM DBADATA.dbo.DBA_ALL_OPERATORS WHERE name ='muthu' and STATUS =1 DECLARE @EMAILIDS1 VARCHAR(500) SELECT @EMAILIDS1= COALESCE(@EMAILIDS1+';','')+EMAIL_ADDRESS FROM DBAdata.DBO.DBA_ALL_OPERATORS WHERE STATUS =1 and Mail_copy='CC' EXEC MSDB.DBO.SP_SEND_DBMAIL @RECIPIENTS=@EMAILIDS, @SUBJECT = 'DBA: No Full backup for last 10 Days', @BODY = @BODY1, @copy_recipients=@EMAILIDS1, @BODY_FORMAT = 'HTML' ,@PROFILE_NAME='muthu'; --select @BODY1 ------------------------------------------------------- END end insert into DBADATA_Archive.DBO.tbl_no_full_backup_7days select *,getdate() from DBADATA.DBO.tbl_no_full_backup_7days where DATEADD(day,0,Last_backup_date) < DATEADD(day,-7,getdate()) END
Image: