Sql-Server

MSSQL:將數據庫還原到備份集中的最新文件

  • August 31, 2016

我有一個處於簡單恢復模式的 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

它會提取相關數據庫的最備份份日期,並為您填寫路徑和位置。

引用自:https://serverfault.com/questions/573537