Friday, October 19, 2012

Script to retrieve SQL Server database backup history and no backups



Script to retrieve SQL Server database 

backup history and no backups


Tim is a Senior Database Administrator and SQL Server MVP.
He has been working with SQL Server since 1999.


http://www.mssqltips.com/sqlservertip/1601/script-to-retrieve-sql-server-database-backup-history-and-no-backups/?utm_source=dailynewsletter&utm_medium=email&utm_content=headline&utm_campaign=20121013

---------------------------------------------------------------------------------
--Database Backups for all databases For Previous Week
--------------------------------------------------------------------------------- 
SELECT 
   
CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server,
   
msdb.dbo.backupset.database_name
   
msdb.dbo.backupset.backup_start_date
   
msdb.dbo.backupset.backup_finish_date,
   
msdb.dbo.backupset.expiration_date,
   
CASE msdb..backupset.type 
       
WHEN 'D' THEN 'Database' 
       
WHEN 'L' THEN 'Log' 
   
END AS backup_type
   
msdb.dbo.backupset.backup_size
   
msdb.dbo.backupmediafamily.logical_device_name
   
msdb.dbo.backupmediafamily.physical_device_name,  
   
msdb.dbo.backupset.name AS backupset_name,
   
msdb.dbo.backupset.description FROM   msdb.dbo.backupmediafamily 
   
INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id msdb.dbo.backupset.media_set_id WHERE  (CONVERT(datetimemsdb.dbo.backupset.backup_start_date102) >= GETDATE() - 7)  ORDER BY 
   
msdb.dbo.backupset.database_name,
   
msdb.dbo.backupset.backup_finish_date

-------------------------------------------------------------------------------------------
--Most Recent Database Backup for Each Database
------------------------------------------------------------------------------------------- 
SELECT 
   
CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server,
   
msdb.dbo.backupset.database_name
   
MAX(msdb.dbo.backupset.backup_finish_dateAS last_db_backup_date FROM   msdb.dbo.backupmediafamily 
   
INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id msdb.dbo.backupset.media_set_id WHERE  msdb..backupset.type 'D' GROUP BY
   
msdb.dbo.backupset.database_name  ORDER BY 
   
msdb.dbo.backupset.database_name


-------------------------------------------------------------------------------------------
--Most Recent Database Backup for Each Database - Detailed
------------------------------------------------------------------------------------------- 
SELECT 
   
A.[Server]
   
A.last_db_backup_date
   
B.backup_start_date
   
B.expiration_date,
   
B.backup_size
   
B.logical_device_name
   
B.physical_device_name,  
   
B.backupset_name,
   
B.description FROM
   
(
   
SELECT  
       
CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server,
       
msdb.dbo.backupset.database_name
       
MAX(msdb.dbo.backupset.backup_finish_dateAS last_db_backup_date
   
FROM    msdb.dbo.backupmediafamily 
       
INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id msdb.dbo.backupset.media_set_id
   
WHERE   msdb..backupset.type 'D'
   
GROUP BY
       
msdb.dbo.backupset.database_name 
   
AS A
   
   
LEFT JOIN 

   
(
   
SELECT  
   
CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server,
   
msdb.dbo.backupset.database_name
   
msdb.dbo.backupset.backup_start_date
   
msdb.dbo.backupset.backup_finish_date,
   
msdb.dbo.backupset.expiration_date,
   
msdb.dbo.backupset.backup_size
   
msdb.dbo.backupmediafamily.logical_device_name
   
msdb.dbo.backupmediafamily.physical_device_name,  
   
msdb.dbo.backupset.name AS backupset_name,
   
msdb.dbo.backupset.description FROM   msdb.dbo.backupmediafamily 
   
INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id msdb.dbo.backupset.media_set_id  WHERE  msdb..backupset.type 'D'
   
AS B
   
ON A.[server] B.[server] AND A.[database_name] B.[database_name] AND A.[last_db_backup_date] B.[backup_finish_date] ORDER BY 
   
A.database_name

-------------------------------------------------------------------------------------------
--Databases Missing a Data (aka Full) Back-Up Within Past 24 Hours
-------------------------------------------------------------------------------------------
--Databases with data backup over 24 hours old 
SELECT
   
CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server,
   
msdb.dbo.backupset.database_name,
   
MAX(msdb.dbo.backupset.backup_finish_dateAS last_db_backup_date,
   
DATEDIFF(hhMAX(msdb.dbo.backupset.backup_finish_date), GETDATE()) AS [Backup Age (Hours)] FROM    msdb.dbo.backupset WHERE     msdb.dbo.backupset.type 'D'  GROUP BY msdb.dbo.backupset.database_name 
HAVING      (MAX(msdb.dbo.backupset.backup_finish_date) < DATEADD(hh, - 24GETDATE())) 
UNION 
--Databases without any backup history SELECT     
   
CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server
   
master.dbo.sysdatabases.NAME AS database_name
   NULL 
AS [Last Data Backup Date]
   
9999 AS [Backup Age (Hours)]  FROM
   
master.dbo.sysdatabases LEFT JOIN msdb.dbo.backupset
       
ON master.dbo.sysdatabases.name  msdb.dbo.backupset.database_name WHERE msdb.dbo.backupset.database_name IS NULL AND master.dbo.sysdatabases.name <> 'tempdb' ORDER BY 
   
msdb.dbo.backupset.database_name


No comments:

Post a Comment