Quantcast
Channel: SQLServerCentral » SQL Server 2014 » Development - SQL Server 2014 » Latest topics
Viewing all articles
Browse latest Browse all 3145

Script to stop service using XP_CMDSHELL, restore full and differential .bak files in a single script

$
0
0
Hi -I have a need to stop some application services based on the database environment I am refreshing, restore full bkup in norecovery, and then do the differential in recovery mode. I am putting below script to do all steps in one single code. The two issues I am having is that 1) I am not sure how to run to two XP_CMDSHELL in a single transaction, and 2) for some reason the code is not doing restore as it should. Can you please help me here... SCRIPt:DECLARE @Full_BKUP_PATH varchar(400),@DIFF_BKUP_PATH nvarchar(100),@DB_DEST nvarchar(75),@SQL varchar(200)SET @Full_BKUP_PATH ='D:\TEST.bak'SET @DIFF_BKUP_PATH ='D:\TEST_DIFF.bak'SET @DB_DEST = 'TEST'SET @SQL = ''-- STEP 1 STOP SERVICES BASED ON THE DB ENVIRONMENTBEGIN TRANSACTION stopservice;BEGIN TRY--stop servicesIF @DB_DEST = 'TEST' BEGIN EXEC master..XP_CMDSHELL 'SC \\SRVRNAME stop Spooler' -- I am using these two service to show how I am stopping the services EXEC master..XP_CMDSHELL 'SC \\SRVRNAME stop PlugPlay'end IF @DB_DEST = 'DEV' BEGIN EXEC master..XP_CMDSHELL 'SC \\SRVRNAME stop Spooler' EXEC master..XP_CMDSHELL 'SC \\SRVRNAME stop PlugPlay'END END TRYBEGIN CATCHIF @@TRANCOUNT < 0 ROLLBACK TRANSACTION stopservice;END CATCHIF @@TRANCOUNT > 0 COMMIT TRANSACTION stopservice;-- STEP 2 RESTORE DB in NORECOVERY MODEBEGIN TRANSACTION RSTRWithNoRecovery;BEGIN TRY SELECT @SQL = @SQL + 'Kill ' + Convert(varchar, SPId) + ';' FROM MASTER..SysProcesses WHERE DBId = DB_ID(@DB_DEST) AND SPId <> @@SPId EXEC(@SQL); RESTORE DATABASE @DB_DEST FROM DISK = @Full_BKUP_PATH WITH REPLACE, NORECOVERY;END TRYBEGIN CATCHIF @@TRANCOUNT < 0 ROLLBACK TRANSACTION RSTRWithNoRecovery;END CATCHIF @@TRANCOUNT > 0 COMMIT TRANSACTION RSTRWithNoRecovery; print 'restore still in progress..' -- STEP 3 RESTORE DB IN RECOVERY MODE BEGIN TRANSACTION RSTRWIthRecovery;BEGIN TRY RESTORE DATABASE @DB_DEST FROM DISK = @DIFF_BKUP_PATH WITH REPLACE, RECOVERY;END TRYBEGIN CATCHIF @@TRANCOUNT < 0 ROLLBACK TRANSACTION RSTRWIthRecovery;END CATCHIF @@TRANCOUNT > 0 COMMIT TRANSACTION RSTRWIthRecovery;

Viewing all articles
Browse latest Browse all 3145

Latest Images

Trending Articles



Latest Images