MSSQL: Restaurar um banco de dados para o arquivo mais recente em um conjunto de backup

4

Eu tenho um banco de dados do MSSQL 2008R2 no modo de recuperação SIMPLE que é feito backup periodicamente com

BACKUP DATABASE MyDB to DISK = 'Z:\MyDB.cbak'  WITH COMPRESSION

Isso é executado periodicamente, criando vários conjuntos de backups no arquivo. Quero restaurar o backup mais recente que foi feito.

Fazendo isso manualmente, posso executar RESTORE HEADERONLY from Disk='Z:\DougHub.cbak' e, em seguida, encontrar a posição mais recente para executar RESTORE DATABASE MyDB from Disk='Z:\MyDB.cbak' with FILE = <some number> , mas quero automatizar essa etapa para que sempre restaure o backup mais recente.

Como eu crio um comando TSQL que irá restaurar o backup mais recente do arquivo de backup?

    
por DrStalker 06.02.2014 / 02:49

1 resposta

6

Algo como isso pode fazer o truque. Acabei de modificar rapidamente algo que uso para um propósito ligeiramente diferente.

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

Ele extrai a última data de backup do banco de dados em questão e preenche o caminho e a posição para você.

    
por 06.02.2014 / 05:34