Skip to content

Commit 82ff501

Browse files
committed
Updated variable name and addressed issue #849
Changed the variable from @ContinueDiff to @RestoreDiff just so there wasn't any confusion. Added ORDER BY clause at line 256 to the log file restore so that log files get restored in order as described in issues #849
1 parent 529688b commit 82ff501

File tree

1 file changed

+23
-11
lines changed

1 file changed

+23
-11
lines changed

sp_DatabaseRestore.sql

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,15 @@ EXEC dbo.DatabaseRestore
2626
@BackupPathLog = 'D:\Backup\SQL2016PROD1A\LogShipMe\LOG\',
2727
@ContinueLogs = 0,
2828
@RunRecovery = 1;
29+
30+
EXEC dbo.DatabaseRestore
31+
@Database = 'LogShipMe',
32+
@BackupPathFull = 'D:\Backup\SQL2016PROD1A\LogShipMe\FULL\',
33+
@BackupPathDiff = 'D:\Backup\SQL2016PROD1A\LogShipMe\DIFF\',
34+
@BackupPathLog = 'D:\Backup\SQL2016PROD1A\LogShipMe\LOG\',
35+
@RestoreDiff = 1,
36+
@ContinueLogs = 0,
37+
@RunRecovery = 1;
2938
*/
3039

3140
IF OBJECT_ID('dbo.sp_DatabaseRestore') IS NULL
@@ -34,8 +43,8 @@ GO
3443

3544
ALTER PROCEDURE [dbo].[sp_DatabaseRestore]
3645
@Database NVARCHAR(128), @RestoreDatabaseName NVARCHAR(128) = NULL, @BackupPathFull NVARCHAR(MAX), @BackupPathDiff NVARCHAR(MAX), @BackupPathLog NVARCHAR(MAX),
37-
@MoveFiles bit = 0, @MoveDataDrive NVARCHAR(260) = NULL, @MoveLogDrive NVARCHAR(260) = NULL, @TestRestore bit = 0, @RunCheckDB bit = 0, @ContinueDiff bit = 0,
38-
@ContinueLogs bit = 0, @RunRecovery bit = 0
46+
@MoveFiles bit = 0, @MoveDataDrive NVARCHAR(260) = NULL, @MoveLogDrive NVARCHAR(260) = NULL, @TestRestore bit = 0, @RunCheckDB bit = 0, @RestoreDiff bit = 0,
47+
@ContinueLogs bit = 0, @RunRecovery bit = 0, @Debug INT = 0
3948
AS
4049
SET NOCOUNT ON;
4150

@@ -178,13 +187,14 @@ IF @ContinueLogs = 0
178187
BEGIN
179188
SET @sql = 'RESTORE DATABASE '+@RestoreDatabaseName+' FROM DISK = '''+@BackupPathFull + @LastFullBackup+ ''' WITH NORECOVERY, REPLACE' + @MoveOption+CHAR(13);
180189
PRINT @sql;
181-
EXECUTE @sql = [dbo].[CommandExecute] @Command = @sql, @CommandType = 'RESTORE DATABASE', @Mode = 1, @DatabaseName = @Database, @LogToTable = 'Y', @Execute = 'Y';
182-
--get the backup completed data so we can apply tlogs from that point forwards
183-
190+
IF @Debug = 0
191+
EXECUTE @sql = [dbo].[CommandExecute] @Command = @sql, @CommandType = 'RESTORE DATABASE', @Mode = 1, @DatabaseName = @Database, @LogToTable = 'Y', @Execute = 'Y';
192+
193+
--get the backup completed data so we can apply tlogs from that point forwards
184194
SET @sql = REPLACE(@HeadersSQL, '{Path}', @BackupPathFull + @LastFullBackup);
185195
PRINT @sql;
186196
EXECUTE (@sql);
187-
--DECLARE @BackupDateTime AS CHAR(15), @FullLastLSN NUMERIC(25, 0);
197+
--DECLARE @BackupDateTime AS CHAR(15), @FullLastLSN NUMERIC(25, 0); Commented out for testing
188198
SELECT @BackupDateTime = RIGHT(@LastFullBackup, 19)
189199
SELECT @FullLastLSN = CAST(LastLSN AS NUMERIC(25, 0)) FROM #Headers WHERE BackupType = 1;
190200
PRINT @BackupDateTime
@@ -214,13 +224,14 @@ WHERE BackupFile LIKE '%.bak'
214224
AND
215225
BackupFile LIKE '%'+@Database+'%';
216226

217-
IF @ContinueDiff = 1 AND @BackupDateTime < RIGHT(@LastDiffBackup, 19)
227+
IF @RestoreDiff = 1 AND @BackupDateTime < RIGHT(@LastDiffBackup, 19)
218228
BEGIN
219229
SET @sql = 'RESTORE DATABASE '+@RestoreDatabaseName+' FROM DISK = '''+@BackupPathDiff + @LastDiffBackup+ ''' WITH NORECOVERY';
220230
PRINT @sql;
221-
EXECUTE @sql = [dbo].[CommandExecute] @Command = @sql, @CommandType = 'RESTORE DATABASE', @Mode = 1, @DatabaseName = @Database, @LogToTable = 'Y', @Execute = 'Y';
222-
--get the backup completed data so we can apply tlogs from that point forwards
223-
231+
IF @Debug = 0
232+
EXECUTE @sql = [dbo].[CommandExecute] @Command = @sql, @CommandType = 'RESTORE DATABASE', @Mode = 1, @DatabaseName = @Database, @LogToTable = 'Y', @Execute = 'Y';
233+
234+
--get the backup completed data so we can apply tlogs from that point forwards
224235
SET @sql = REPLACE(@HeadersSQL, '{Path}', @BackupPathFull + @LastFullBackup);
225236
PRINT @sql;
226237
EXECUTE (@sql);
@@ -241,7 +252,8 @@ DECLARE BackupFiles CURSOR FOR
241252
FROM @FileList
242253
WHERE BackupFile LIKE '%.trn'
243254
AND BackupFile LIKE '%'+@Database+'%'
244-
AND (@ContinueLogs = 1 OR (@ContinueLogs = 0 AND LEFT(RIGHT(BackupFile, 19), 15) >= @BackupDateTime));
255+
AND (@ContinueLogs = 1 OR (@ContinueLogs = 0 AND LEFT(RIGHT(BackupFile, 19), 15) >= @BackupDateTime))
256+
ORDER BY BackupFile;
245257
OPEN BackupFiles;
246258
DECLARE @i tinyint = 1, @LogFirstLSN NUMERIC(25, 0), @LogLastLSN NUMERIC(25, 0);
247259
-- Loop through all the files for the database

0 commit comments

Comments
 (0)