Skip to content

Commit 02b3eef

Browse files
author
Greg Dodd
committed
Update sp_DatabaseRestore.sql
Using restorehistory to work out which database the log files have been restored to Updating calls to CommandExecute to pass in DatabaseContext
1 parent 44a6de6 commit 02b3eef

File tree

1 file changed

+26
-21
lines changed

1 file changed

+26
-21
lines changed

sp_DatabaseRestore.sql

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -756,7 +756,7 @@ BEGIN
756756
PRINT @sql;
757757
END;
758758
IF @Debug IN (0, 1) AND @Execute = 'Y' AND DATABASEPROPERTYEX(@RestoreDatabaseName,'STATUS') != 'RESTORING'
759-
EXECUTE @sql = [dbo].[CommandExecute] @Command = @sql, @CommandType = 'ALTER DATABASE SINGLE_USER', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
759+
EXECUTE @sql = [dbo].[CommandExecute] @DatabaseContext=N'master', @Command = @sql, @CommandType = 'ALTER DATABASE SINGLE_USER', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
760760
END
761761
IF @ExistingDBAction IN (2, 3)
762762
BEGIN
@@ -775,7 +775,7 @@ BEGIN
775775
PRINT @sql;
776776
END;
777777
IF @Debug IN (0, 1) AND @Execute = 'Y'
778-
EXECUTE @sql = [dbo].[CommandExecute] @Command = @sql, @CommandType = 'KILL CONNECTIONS', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
778+
EXECUTE @sql = [dbo].[CommandExecute] @DatabaseContext=N'master', @Command = @sql, @CommandType = 'KILL CONNECTIONS', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
779779
END
780780
IF @ExistingDBAction = 3
781781
BEGIN
@@ -788,7 +788,7 @@ BEGIN
788788
PRINT @sql;
789789
END;
790790
IF @Debug IN (0, 1) AND @Execute = 'Y'
791-
EXECUTE @sql = [dbo].[CommandExecute] @Command = @sql, @CommandType = 'DROP DATABASE', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
791+
EXECUTE @sql = [dbo].[CommandExecute] @DatabaseContext=N'master', @Command = @sql, @CommandType = 'DROP DATABASE', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
792792
END
793793
IF @ExistingDBAction = 4
794794
BEGIN
@@ -801,7 +801,7 @@ BEGIN
801801
PRINT @sql;
802802
END;
803803
IF @Debug IN (0, 1) AND @Execute = 'Y' AND DATABASEPROPERTYEX(@RestoreDatabaseName,'STATUS') != 'RESTORING'
804-
EXECUTE @sql = [dbo].[CommandExecute] @Command = @sql, @CommandType = 'OFFLINE DATABASE', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
804+
EXECUTE @sql = [dbo].[CommandExecute] @DatabaseContext=N'master', @Command = @sql, @CommandType = 'OFFLINE DATABASE', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
805805
END;
806806
END
807807
ELSE
@@ -855,7 +855,7 @@ BEGIN
855855
END;
856856

857857
IF @Debug IN (0, 1) AND @Execute = 'Y'
858-
EXECUTE @sql = [dbo].[CommandExecute] @Command = @sql, @CommandType = 'RESTORE DATABASE', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
858+
EXECUTE @sql = [dbo].[CommandExecute] @DatabaseContext=N'master', @Command = @sql, @CommandType = 'RESTORE DATABASE', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
859859

860860
-- We already loaded #Headers above
861861

@@ -1038,7 +1038,7 @@ BEGIN
10381038
PRINT @sql;
10391039
END;
10401040
IF @Debug IN (0, 1) AND @Execute = 'Y'
1041-
EXECUTE @sql = [dbo].[CommandExecute] @Command = @sql, @CommandType = 'RESTORE DATABASE', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
1041+
EXECUTE @sql = [dbo].[CommandExecute] @DatabaseContext=N'master', @Command = @sql, @CommandType = 'RESTORE DATABASE', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
10421042

10431043
--get the backup completed data so we can apply tlogs from that point forwards
10441044
SET @sql = REPLACE(@HeadersSQL, N'{Path}', @CurrentBackupPathDiff + @LastDiffBackup);
@@ -1186,16 +1186,24 @@ BEGIN
11861186
END
11871187
/*End folder sanity check*/
11881188

1189-
1189+
IF @Debug = 1
1190+
BEGIN
1191+
SELECT * FROM @FileList WHERE BackupFile IS NOT NULL;
1192+
END
1193+
11901194
IF @SkipBackupsAlreadyInMsdb = 1
11911195
BEGIN
1196+
11921197
SELECT TOP 1 @LogLastNameInMsdbAS = bf.physical_device_name
1193-
FROM msdb.dbo.backupmediafamily bf
1194-
WHERE physical_device_name like @BackupPathLog + '%'
1195-
ORDER BY physical_device_name DESC
1198+
FROM msdb.dbo.backupmediafamily bf
1199+
INNER JOIN msdb.dbo.backupset bs ON bs.media_set_id = bf.media_set_id
1200+
INNER JOIN msdb.dbo.restorehistory rh ON rh.backup_set_id = bs.backup_set_id
1201+
WHERE physical_device_name like @BackupPathLog + '%'
1202+
AND rh.destination_database_name = @UnquotedRestoreDatabaseName
1203+
ORDER BY physical_device_name DESC
11961204

11971205
IF @Debug = 1
1198-
BEGIN
1206+
BEGIN
11991207
SELECT 'Keeping LOG backups with name > : ' + @LogLastNameInMsdbAS
12001208
END
12011209

@@ -1204,10 +1212,7 @@ BEGIN
12041212
WHERE fl.BackupPath + fl.BackupFile <= @LogLastNameInMsdbAS
12051213
END
12061214

1207-
IF @Debug = 1
1208-
BEGIN
1209-
SELECT * FROM @FileList WHERE BackupFile IS NOT NULL;
1210-
END
1215+
12111216

12121217
IF (@OnlyLogsAfter IS NOT NULL)
12131218
BEGIN
@@ -1359,7 +1364,7 @@ WHERE BackupFile IS NOT NULL;
13591364
END;
13601365

13611366
IF @Debug IN (0, 1) AND @Execute = 'Y'
1362-
EXECUTE @sql = [dbo].[CommandExecute] @Command = @sql, @CommandType = 'RESTORE LOG', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
1367+
EXECUTE @sql = [dbo].[CommandExecute] @DatabaseContext=N'master', @Command = @sql, @CommandType = 'RESTORE LOG', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
13631368
END;
13641369

13651370
SET @LogRestoreRanking += 1;
@@ -1384,7 +1389,7 @@ IF @RunRecovery = 1
13841389
END;
13851390

13861391
IF @Debug IN (0, 1) AND @Execute = 'Y'
1387-
EXECUTE @sql = [dbo].[CommandExecute] @Command = @sql, @CommandType = 'RECOVER DATABASE', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
1392+
EXECUTE @sql = [dbo].[CommandExecute] @DatabaseContext=N'master', @Command = @sql, @CommandType = 'RECOVER DATABASE', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
13881393
END;
13891394

13901395
-- Ensure simple recovery model
@@ -1399,7 +1404,7 @@ IF @ForceSimpleRecovery = 1
13991404
END;
14001405

14011406
IF @Debug IN (0, 1) AND @Execute = 'Y'
1402-
EXECUTE @sql = [dbo].[CommandExecute] @Command = @sql, @CommandType = 'SIMPLE LOGGING', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
1407+
EXECUTE @sql = [dbo].[CommandExecute] @DatabaseContext=N'master', @Command = @sql, @CommandType = 'SIMPLE LOGGING', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
14031408
END;
14041409

14051410
-- Run checkdb against this database
@@ -1414,7 +1419,7 @@ IF @RunCheckDB = 1
14141419
END;
14151420

14161421
IF @Debug IN (0, 1) AND @Execute = 'Y'
1417-
EXECUTE @sql = [dbo].[CommandExecute] @Command = @sql, @CommandType = 'DBCC CHECKDB', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
1422+
EXECUTE @sql = [dbo].[CommandExecute] @DatabaseContext=N'master', @Command = @sql, @CommandType = 'DBCC CHECKDB', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
14181423
END;
14191424

14201425

@@ -1433,7 +1438,7 @@ IF @DatabaseOwner IS NOT NULL
14331438
END;
14341439

14351440
IF @Debug IN (0, 1) AND @Execute = 'Y'
1436-
EXECUTE @sql = [dbo].[CommandExecute] @Command = @sql, @CommandType = 'ALTER AUTHORIZATION', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
1441+
EXECUTE @sql = [dbo].[CommandExecute] @DatabaseContext=N'master',@Command = @sql, @CommandType = 'ALTER AUTHORIZATION', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
14371442
END
14381443
ELSE
14391444
BEGIN
@@ -1458,7 +1463,7 @@ IF @TestRestore = 1
14581463
END;
14591464

14601465
IF @Debug IN (0, 1) AND @Execute = 'Y'
1461-
EXECUTE @sql = [dbo].[CommandExecute] @Command = @sql, @CommandType = 'DROP DATABASE', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
1466+
EXECUTE @sql = [dbo].[CommandExecute] @DatabaseContext=N'master',@Command = @sql, @CommandType = 'DROP DATABASE', @Mode = 1, @DatabaseName = @UnquotedRestoreDatabaseName, @LogToTable = 'Y', @Execute = 'Y';
14621467

14631468
END;
14641469

0 commit comments

Comments
 (0)