Basically used for DR
create this SP in Master Database
Call it from SQL Agent to create the squence on DR server.
Basically used for DR
create this SP in Master Database
Call it from SQL Agent to create the squence on DR server.
/* ==Scripting Parameters== Source Server Version : SQL Server 2008 R2 (10.50.6560) Source Database Engine Edition : Microsoft SQL Server Enterprise Edition Source Database Engine Type : Standalone SQL Server Target Server Version : SQL Server 2008 R2 Target Database Engine Edition : Microsoft SQL Server Enterprise Edition Target Database Engine Type : Standalone SQL Server */ /****** Object: StoredProcedure [dbo].[GenerateFullSequenceRestoreScripts_Litespeed] Script Date: 8/23/2018 1:08:51 PM ******/SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO create PROCEDURE [dbo].[GenerateFullSequenceRestoreScripts_Litespeed] @DBname VARCHAR(500) = null AS BEGIN SET NOCOUNT ON; -- required because we're going to print T-SQL for the restores in the messages 'tab' of SSMS DECLARE @lastFullBackup INT DECLARE @lastFullBackupPath VARCHAR(2000) DECLARE @lastDifferentialBackup INT DECLARE @lastDifferentialBackupPath VARCHAR(2000) DECLARE @Fulllastbackup DATETIME DECLARE @Difflastbackup DATETIME DECLARE @Loglastbackup DATETIME DECLARE @i INT DECLARE @logBackupPath VARCHAR(1000) /* Author:Harkamal Singh CreateDate:2014/06/02 Desc: Script created for Litespeed script generated for Restore purposes of any @DBname */ -- remove temp object that might exist IF OBJECT_ID('tempdb..#MSDBBackupHistory') IS NOT NULL DROP TABLE #MSDBBackupHistory CREATE TABLE #MSDBBackupHistory ( id INT IDENTITY(1,1), backup_start_date DATETIME, backup_type CHAR(1), physical_device_name VARCHAR(1000)) -- dump the last backup first in table INSERT INTO #MSDBBackupHistory (backup_start_date, backup_type, physical_device_name) SELECT BS.backup_start_date, BS.type, RTRIM(BMF.physical_device_name) FROM msdb..backupset BS JOIN msdb..backupmediafamily BMF ON BMF.media_set_id=BS.media_set_id WHERE BS.database_name = @DBName ORDER BY BS.backup_start_date -- get the last Full backup info. SET @lastFullBackup = (SELECT MAX(id) FROM #MSDBBackupHistory WHERE backup_type='D') SET @lastFullBackupPath = (SELECT physical_device_name FROM #MSDBBackupHistory WHERE id=@lastFullBackup) SELECT @Fulllastbackup = MAX(backup_finish_date) FROM msdb.dbo.backupset WHERE TYPE = 'D' AND database_name = @DBname -- Restore the Full backup PRINT '-- Latest Full Backup occured on: ' + CAST(@Fulllastbackup AS VARCHAR) PRINT '-- Server: ' + CAST(@@SERVERNAME AS VARCHAR) PRINT '' PRINT 'USE MASTER' PRINT 'GO' PRINT 'ALTER DATABASE '+ @DBNAME +' SET SINGLE_USER WITH ROLLBACK IMMEDIATE' PRINT 'GO' PRINT 'ALTER DATABASE '+ @DBNAME +' SET RESTRICTED_USER' PRINT 'GO' PRINT 'EXEC master.dbo.xp_restore_database @database=N''' + @DBName + '''' PRINT ', @filename=''' + @lastFullBackupPath + '''' PRINT ',@with= N''REPLACE''' -- IF it's there's no backup (differential or log) after it, we set to 'with recovery' IF (@lastFullBackup = (SELECT MAX(id) FROM #MSDBBackupHistory)) PRINT ', @with=''RECOVERY'';' ELSE PRINT ', @with=''NORECOVERY'';' PRINT '' -- get the last Differential backup (it must be done after the last Full backup) SET @lastDifferentialBackup = (SELECT MAX(id) FROM #MSDBBackupHistory WHERE backup_type='I' AND id > @lastFullBackup) SET @lastDifferentialBackupPath = (SELECT physical_device_name FROM #MSDBBackupHistory WHERE id=@lastDifferentialBackup) -- when there's a differential backup after the last full backup create the restore T-SQL commands IF (@lastDifferentialBackup IS NOT NULL) BEGIN ----check when was the differential backup occured. SELECT @Difflastbackup = MAX(backup_finish_date) FROM msdb.dbo.backupset WHERE TYPE = 'I' AND database_name = @DBname --PRINT '-- Differential Backup occured: ' + CAST(@Difflastbackup AS VARCHAR) -- Restore last diff. backup PRINT 'EXEC master.dbo.xp_restore_database @database=N''' + @DBName + '''' PRINT ', @filename=N''' + @lastDifferentialBackupPath + '''' PRINT ', @with=''DIFFERENTIAL''' -- If no backup made (differential or log) after it, set to 'with recovery' IF (@lastDifferentialBackup = (SELECT MAX(id) FROM #MSDBBackupHistory)) PRINT ', @with=''RECOVERY'';' ELSE PRINT ', @with=''NORECOVERY'';' PRINT '' END -- construct the required TRANSACTION LOG restores IF (@lastDifferentialBackup IS NULL) -- no diff backup made? -- search for log dumps after the last full SET @i = @lastFullBackup + 1 ELSE -- search for log dumps after the last diff SET @i = @lastDifferentialBackup + 1 -- script T-SQL restore commands from the log backup history WHILE (@i <= (SELECT MAX(id) FROM #MSDBBackupHistory)) BEGIN SET @logBackupPath = (SELECT physical_device_name FROM #MSDBBackupHistory WHERE id=@i) PRINT 'EXEC master.dbo.xp_restore_log @database=N''' + @DBName + '''' PRINT ', @filename=N''' + @logBackupPath + '''' -- it's the last transaction log, set to 'with recovery' IF (@i = (SELECT MAX(id) FROM #MSDBBackupHistory)) PRINT ', @with=''RECOVERY'';' ELSE PRINT ', @with=''NORECOVERY'';' PRINT 'GO' PRINT '' -- try to find the next log entry SET @i = @i + 1 END -- remove temp objects that exist IF OBJECT_ID('tempdb..#MSDBBackupHistory') IS NOT NULL DROP TABLE #MSDBBackupHistory END GO