La procédure suivante permet de restaurer la dernière sauvegarde empilée dans un fichier multi sauvegardes.
Créez une table temporaire ayant la même structure que la table résultant de la requête RESTORE FILELISTONLY :
CREATE TABLE #BACKUPS
(LogicalName nvarchar(128),
PhysicalName nvarchar(260),
"Type" char(1),
FileGroupName nvarchar(128),
Size numeric(20,0),
MaxSize numeric(20,0),
FileID bigint,
CreateLSN numeric(25,0),
DropLSN numeric(25,0),
UniqueID uniqueidentifier,
ReadOnlyLSN numeric(25,0),
ReadWriteLSN numeric(25,0),
BackupSizeInBytes bigint,
SourceBlockSize int,
FileGroupID int,
LogGroupGUID uniqueidentifier,
DifferentialBaseLSN numeric(25,0),
DifferentialBaseGUID uniqueidentifier,
IsReadOnly bit,
IsPresent bit,
TDEThumbprint varbinary(32));
Injectez les méta données de backup dedans :
EXEC ('RESTORE FILELISTONLY FROM DISK = ''...''') ;
Extrayez le dernier fileId et réinjectez le dans la commande de restauration :
SELECT @FILE = MAX(FileID)
FROM #BACKUPS;
RESTORE DATABASE ???
FROM DISK = '...'
WITH FILE = @FILE;
Et voilà !
NOTA : la table n’est pas tout à fait la même pour toutes les version de SQL Server. En particulier la colonne TDEThumbprint n’apparait qu’à partir de la version 2008.
—
Frédéric BROUARD, Spécialiste modélisation, bases de données, optimisation, langage SQL.
Le site sur le langage SQL et les S.G.B.D. relationnels : http://sqlpro.developpez.com/
Expert SQL Server http://www.sqlspot.com : audit, optimisation, tuning, formation
* * * * * Enseignant au CNAM PACA et à l’ISEN à Toulon * * * * *