MSSQL: Відновлення БД до останнього файлу в наборі резервних копій


4

У мене є MSSQL 2008R2 DB у простому режимі відновлення, з яким періодично створюється резервне копіювання

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, яка відновить останню резервну копію з файлу резервної копії?


Використовуючи таблицю резервного набору, як у відповіді Кетрін, - це те, що ви хочете, якщо ви відновите в базі даних, де ви створили резервну копію. В іншому випадку найкраще мати будь-коли один набір резервних копій на файл. ... Не те, що ви просили. :)
Грейнджер

У мене є сценарії, які виконують те, що запропонував Ґрейнджер, і я також хочу поділитися ними. :)
Кетрін Вільярд

Відповіді:


6

Щось подібне може зробити трюк. Я просто швидко змінив щось, що використовую для трохи іншої мети.

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

Він виводить останню дату резервного копіювання для відповідної бази даних та заповнює шлях та позицію для вас.


Це не працюватиме для створення резервної копії з декількома смугастими файлами.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.