We have a daily task to overwrite a number of development databases using backups of the associated production databases. The backups are produced by maintenance plans on the production server then transferred to the dev server by FTP. Each day we run a SQL statement similar to this to overwrite each database:
RESTORE DATABASE [Database1]
FROM DISK = N'D:\path\to\Database1_backup_2015_02_05_190004_7401803.bak'
WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10
GO
Each time we run this we have to replace the file name with the correct most recent file. I would like to automate this somehow to minimise the chance of operator error. The problem is that we can't control the name of the .bak
file (although the format is consistent – database name, date, time and whatever that seven digit number is), and the folder will usually contain several days worth of backups.
Best Answer
Since all the details on backups are maintained in the msdb database, you should just extract the backup file name from the source server.
You could create a linked server from your Dev Server to access the Production Server's msdb database. Or you can use OPENQUERY to query the same data. (OPENQUERY may be faster since the query is actually being run on the Production Server.)
For example:
This shows running a stored procedure with no parameters, which might suit your daily restore plan.
If you search for "auto generate sql server database restore scripts" you will find many scripts. An example from Paul Brewer is
sp_RestoreGene
that you might use as is or as a basis to create your ownExecDailyRestore
stored procedure.https://paulbrewer.wordpress.com/sp_restoregene/
Here are the parameters supported by sp_restoregene:
And here is a sample script: