Free SQL Server Learning - Making the most out of SQL Server Agent
solving sql server problems for millions of dbas and developers since 2006



SQL Server DBA Tips SQL Server Developer Tips SQL Server Business Intelligence Tips SQL Server Career Tips SQL Server Tip Categories SQL Server Tutorials SQL Server Webcasts SQL Server Whitepapers SQL Server Tools SQL Server Questions and Answers MSSQLTips Authors About MSSQLTips SQL Server User Groups SQL Server Events I am MSSQLTips MSSQLTips Advertising Options

MSSQLTips Facebook Page MSSQLTips LinkedIn Page MSSQLTips RSS Feed MSSQLTips Pinterest Page MSSQLTips Twitter Page MSSQLTips Google+ Page









SQL Product Highlight

Red Gate Software - SQL Developer Bundle

Improve database development with a bundle of 12 SQL developer tools from Red Gate. The SQL Developer Bundle will help you:

  • Improve testing and productivity. Find and fix errors caused by differences between databases with SQL Compare.
  • Troubleshoot errors. Browse a history of changes, find broken code or conflicts, and automatically generate scripts to resolve inconsistencies.
  • Simplify database deployments. Use one-click deployment across multiple servers.

Learn more!






































Script to check that backup files still exist for SQL Server

By:   |   Read Comments (1)   |   Related Tips: More > Scripts

Problem
You have configured your database backup jobs without any problems. The backups themselves seem to be working, but are the files still where you think they are? How do you know they have not been moved, or worse, deleted to free up some space on your server? And when would you find out that the files were no longer there? If you are looking for the file to do a restore, and cannot find it, then it is too late.  In this tip, I will show you a simple way to check through the backup history to find the last full backup for each database and also to check that the file still exists where it is supposed to exist.

Solution
The database backup file information is readily available inside the msdb database, making the solution as easy as a few lines of T-SQL. The code below will work for SQL2005/8 by going into the msdb database, extracting the file name, and using the undocumented system stored procedure xp_fileexist. Yes, I said undocumented, which means you need to use at your own risk as Microsoft does not support the undocumented stored procedures and they are subject to change.  This system stored procedure is used in a lot of places, so don't be frightened by its undocumented nature.

The code will return the backup file details for each active database on the instance at the moment the code is executed. It will read some tables in the msdb database and return the filename for the last full backup of each database. It will then use xp_fileexist to determine if the file still exists where it was originally created. If it does not, then it will print out a brief error message that includes the name of the missing file and the database.


Returning the details

SET NOCOUNT ON
DECLARE 
@FileName VARCHAR(255)
DECLARE @File_Exists INT
DECLARE 
@DBname sysname

--get list of files to check
DECLARE FileNameCsr CURSOR
READ_ONLY
FOR 
   SELECT 
physical_device_namesd.name
   
FROM msdb..backupmediafamily bmf
   
INNER JOIN msdb..backupset bms ON bmf.media_set_id bms.media_set_id
   
INNER JOIN master..sysdatabases sd ON bms.database_name sd.name
   
AND bms.backup_start_date (SELECT MAX(backup_start_dateFROM [msdb]..[backupset] b2
                                   
WHERE bms.database_name b2.database_name AND b2.type 'D')
   
WHERE sd.name NOT IN ('Pubs','tempdb','Northwind''Adventureworks')

BEGIN TRY
   
OPEN FileNameCsr

   
FETCH NEXT FROM FileNameCsr INTO @FileName@DBname
   
WHILE (@@fetch_status <> -1)
   
BEGIN
       IF 
(@@fetch_status <> -2)
       
BEGIN
           EXEC 
Master.dbo.xp_fileexist @FileName@File_Exists OUT
       
           
--if the file is not found, print out a message
           
IF @File_Exists --0 means file is not found, 1 means it is found
               
PRINT 'File Not Found: ' @FileName ' -- for database: ' @DBName
       
END
   
   FETCH 
NEXT FROM FileNameCsr INTO @FileName@DBName
   
END
   
END 
TRY

BEGIN CATCH
    
SELECT
        
ERROR_NUMBER() AS ErrorNumber
        
,ERROR_SEVERITY() AS ErrorSeverity
        
,ERROR_STATE() AS ErrorState
        
,ERROR_PROCEDURE() AS ErrorProcedure
        
,ERROR_LINE() AS ErrorLine
        
,ERROR_MESSAGE() AS ErrorMessage;
END CATCH


CLOSE FileNameCsr
DEALLOCATE FileNameCsr
GO

The script will not return a result set, it will only return a brief message regarding any files not found.


Here is a screenshot of a sample result set returned by the script.

xp_fileexist screen shot


 

Next Steps

  • Take the above code and execute against your instance. You could also put this into a SQL Agent job and automate the task to alert you of missing files.
  • The code as written only looks at missing full backups.  You can extend this script to look for all backup types to make sure that all files for the entire backup set still exist.


Last Update: 7/23/2009

About the author

Thomas is a seasoned IT professional with over a decade of experience. He is a Senior DBA for Confio Software and SQL Server MVP.

View all my tips


Print  
Become a paid author


Comments and Feedback:

Friday, July 24, 2009 - 1:29:16 AM - --cranfield Read The Tip

nice script, Batman.  I'll be adding this to our daily sweep process we run across all our servers.

 

-- cranfield



Post a Comment or Question

Keep it clean and stay on the subject or we may delete your comment.
Your email address is not published. Required fields are marked with an asterisk (*)

*Name   *Email Notify for updates

Signup for our newsletter


Comments
*Enter Code refresh code


 
Sponsor Information
"Amazing, Amazing, Amazing! SQL doctor is truly one of the most powerful tools I have seen."

SQL Developer Bundle: Cut out dull work with 12 tools for simpler, faster database development. Free trial

Wish your SQL Servers could run wide open? Learn how the Edgewood SQL Server Consultants can make it happen.

In two mouse clicks view SQL bottlenecks. With ZERO impact pinpoint all poor performing SQL with 100% accuracy.

The SQL Server Security THREAT - It’s Closer Than You Think


Copyright (c) 2006-2013 Edgewood Solutions, LLC All rights reserved
privacy | disclaimer | copyright | advertise | about
authors | contribute | feedback | giveaways | user groups
Some names and products listed are the registered trademarks of their respective owners.


Edgewood Solutions LLC | MSSharePointTips.com | MSSQLTips.com