У меня есть база данных MSSQL 2008R2 в режиме ПРОСТОГО восстановления, для которой периодически создается резервная копия
BACKUP DATABASE MyDB to DISK = 'Z:\MyDB.cbak' WITH COMPRESSION
Это выполняется периодически, создавая в файле несколько наборов резервных копий. Я хочу восстановить последнюю сделанную резервную копию.
Делая это вручную, я могу бежать RESTORE HEADERONLY from Disk='Z:\DougHub.cbak'
а затем найдите последнюю позицию для запуска RESTORE DATABASE MyDB from Disk='Z:\MyDB.cbak' with FILE = <some number>
но я хочу автоматизировать этот шаг, чтобы всегда восстанавливать самую последнюю резервную копию.
Как мне создать команду TSQL, которая восстановит самую последнюю резервную копию из файла резервной копии?
Что-то вроде этого может помочь. Я просто быстро изменил то, что использую для немного другой цели.
declare @dbname varchar(80),
@lastfull datetime,
@fullback varchar(1024),
@position int,
@SQL nvarchar(max)
set @dbname = 'YourDB'
select @lastfull = MAX(backup_finish_date)
FROM master.sys.databases d
LEFT OUTER JOIN msdb.dbo.backupset b ON d.name = b.database_name AND b.type = 'D'
WHERE d.database_id NOT IN (2, 3) and d.name=@dbname
SELECT @fullback = m.physical_device_name, @position = b.position
FROM msdb.dbo.backupmediafamily AS m INNER JOIN
msdb.dbo.backupset AS b ON m.media_set_id = b.media_set_id
and b.type='D' and b.database_name=@dbname
AND b.backup_finish_date=@lastfull
set @SQL = 'RESTORE DATABASE [' + @DBname + '] FROM DISK = N''' + @fullback + ''' WITH FILE = ' + convert(nvarchar,@position) + ', RECOVERY, NOUNLOAD, STATS = 10'
EXEC SP_EXECUTESQL @SQL
Он извлекает дату последней резервной копии для рассматриваемой базы данных и заполняет путь и позицию за вас.