Skip to content

Commit 1d31d5a

Browse files
authored
Merge pull request #3269 from sqlslinger/FixStopAtSplitLogBackup
sp_DatabaseRestore: Fix last log file for split backups when using @StoPAt
2 parents 7403835 + 149aabe commit 1d31d5a

1 file changed

Lines changed: 17 additions & 13 deletions

File tree

sp_DatabaseRestore.sql

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ ALTER PROCEDURE [dbo].[sp_DatabaseRestore]
1111
@MoveDataDrive NVARCHAR(260) = NULL,
1212
@MoveLogDrive NVARCHAR(260) = NULL,
1313
@MoveFilestreamDrive NVARCHAR(260) = NULL,
14-
@MoveFullTextCatalogDrive NVARCHAR(260) = NULL,
15-
@BufferCount INT = NULL,
16-
@MaxTransferSize INT = NULL,
17-
@BlockSize INT = NULL,
14+
@MoveFullTextCatalogDrive NVARCHAR(260) = NULL,
15+
@BufferCount INT = NULL,
16+
@MaxTransferSize INT = NULL,
17+
@BlockSize INT = NULL,
1818
@TestRestore BIT = 0,
1919
@RunCheckDB BIT = 0,
2020
@RestoreDiff BIT = 0,
@@ -27,15 +27,15 @@ ALTER PROCEDURE [dbo].[sp_DatabaseRestore]
2727
@StopAt NVARCHAR(14) = NULL,
2828
@OnlyLogsAfter NVARCHAR(14) = NULL,
2929
@SimpleFolderEnumeration BIT = 0,
30-
@SkipBackupsAlreadyInMsdb BIT = 0,
31-
@DatabaseOwner sysname = NULL,
32-
@SetTrustworthyON BIT = 0,
30+
@SkipBackupsAlreadyInMsdb BIT = 0,
31+
@DatabaseOwner sysname = NULL,
32+
@SetTrustworthyON BIT = 0,
3333
@Execute CHAR(1) = Y,
34-
@FileExtensionDiff NVARCHAR(128) = NULL,
34+
@FileExtensionDiff NVARCHAR(128) = NULL,
3535
@Debug INT = 0,
3636
@Help BIT = 0,
3737
@Version VARCHAR(30) = NULL OUTPUT,
38-
@VersionDate DATETIME = NULL OUTPUT,
38+
@VersionDate DATETIME = NULL OUTPUT,
3939
@VersionCheckMode BIT = 0
4040
AS
4141
SET NOCOUNT ON;
@@ -899,7 +899,7 @@ BEGIN
899899
/* now take split backups into account */
900900
IF (SELECT COUNT(*) FROM #SplitFullBackups) > 0
901901
BEGIN
902-
RAISERROR('Split backups found', 0, 1) WITH NOWAIT;
902+
IF @Debug = 1 RAISERROR('Split backups found', 0, 1) WITH NOWAIT;
903903

904904
SET @sql = N'RESTORE DATABASE ' + @RestoreDatabaseName + N' FROM '
905905
+ STUFF(
@@ -1092,7 +1092,7 @@ BEGIN
10921092

10931093
IF (SELECT COUNT(*) FROM #SplitDiffBackups) > 0
10941094
BEGIN
1095-
RAISERROR ('Split backups found', 0, 1) WITH NOWAIT;
1095+
IF @Debug = 1 RAISERROR ('Split backups found', 0, 1) WITH NOWAIT;
10961096
SET @sql = N'RESTORE DATABASE ' + @RestoreDatabaseName + N' FROM '
10971097
+ STUFF(
10981098
(SELECT CHAR( 10 ) + ',DISK=''' + BackupPath + BackupFile + ''''
@@ -1374,7 +1374,7 @@ BEGIN
13741374
AND REPLACE( RIGHT( REPLACE( fl.BackupFile, RIGHT( fl.BackupFile, PATINDEX( '%_[0-9][0-9]%', REVERSE( fl.BackupFile ) ) ), '' ), 16 ), '_', '' ) > @StopAt
13751375
ORDER BY BackupFile;
13761376
END
1377-
1377+
13781378
IF @ExtraLogFile IS NULL
13791379
BEGIN
13801380
DELETE fl
@@ -1385,6 +1385,10 @@ BEGIN
13851385
END
13861386
ELSE
13871387
BEGIN
1388+
-- If this is a split backup, @ExtraLogFile contains only the first split backup file, either _1.trn or _01.trn
1389+
-- Change @ExtraLogFile to the max split backup file, then delete all log files greater than this
1390+
SET @ExtraLogFile = REPLACE(REPLACE(@ExtraLogFile, '_1.trn', '_9.trn'), '_01.trn', '_64.trn')
1391+
13881392
DELETE fl
13891393
FROM @FileList AS fl
13901394
WHERE BackupFile LIKE N'%.trn'
@@ -1447,7 +1451,7 @@ WHERE BackupFile IS NOT NULL;
14471451

14481452
IF (SELECT COUNT( * ) FROM #SplitLogBackups WHERE DenseRank = @LogRestoreRanking) > 1
14491453
BEGIN
1450-
RAISERROR ('Split backups found', 0, 1) WITH NOWAIT;
1454+
IF @Debug = 1 RAISERROR ('Split backups found', 0, 1) WITH NOWAIT;
14511455
SET @sql = N'RESTORE LOG ' + @RestoreDatabaseName + N' FROM '
14521456
+ STUFF(
14531457
(SELECT CHAR( 10 ) + ',DISK=''' + BackupPath + BackupFile + ''''

0 commit comments

Comments
 (0)