Sql-Server

如何還原一批事務日誌而不是一個一個

  • January 6, 2020

我有一個 SQL Server 數據庫,它每 10 分鐘備份一次事務日誌,並進行夜間完整備份。

使用 SQL 2008 Management Studio,我們似乎必須一一選擇每個事務日誌。有沒有辦法將它指向一個目錄?

我正在考慮每天執行幾次差異備份,這可能會抵消其中的一部分,但是一個接一個地處理數十個/數百個文件似乎非常耗時。編寫程式碼以嘗試編寫腳本似乎與我們的核心競爭力相去甚遠。

如果 SQL Server Management Studio 沒有更快的方法,也許有第三方工具可用?

無法在 SQL Server Management Studio 中指定要還原的一堆事務日誌備份(oк 文件夾)。

但是您可以在數據庫 MSDB(表備份集和相關)中找到有關 SQL Server 備份操作的所有資訊。

這是生成 SQL Server 命令的腳本,用於從備份還原數據庫並應用從上次完整數據庫備份執行的所有事務日誌備份。我認為它應該對你有所幫助。

DECLARE @databaseName sysname
DECLARE @backupStartDate datetime
DECLARE @backup_set_id_start INT
DECLARE @backup_set_id_end INT

-- set database to be used
SET @databaseName = '<your_database_name_here>' 

SELECT @backup_set_id_start = MAX(backup_set_id) 
FROM  msdb.dbo.backupset 
WHERE database_name = @databaseName AND type = 'D'

SELECT @backup_set_id_end = MIN(backup_set_id) 
FROM  msdb.dbo.backupset 
WHERE database_name = @databaseName AND type = 'D'
AND backup_set_id > @backup_set_id_start

IF @backup_set_id_end IS NULL SET @backup_set_id_end = 999999999

SELECT backup_set_id, 'RESTORE DATABASE ' + @databaseName + ' FROM DISK = ''' 
              + mf.physical_device_name + ''' WITH NORECOVERY'
FROM    msdb.dbo.backupset b,
          msdb.dbo.backupmediafamily mf
WHERE    b.media_set_id = mf.media_set_id
          AND b.database_name = @databaseName
         AND b.backup_set_id = @backup_set_id_start
UNION
SELECT backup_set_id, 'RESTORE LOG ' + @databaseName + ' FROM DISK = ''' 
              + mf.physical_device_name + ''' WITH NORECOVERY'
FROM    msdb.dbo.backupset b,
          msdb.dbo.backupmediafamily mf
WHERE    b.media_set_id = mf.media_set_id
          AND b.database_name = @databaseName
         AND b.backup_set_id >= @backup_set_id_start AND b.backup_set_id < @backup_set_id_end
         AND b.type = 'L'
UNION
SELECT 999999999 AS backup_set_id, 'RESTORE DATABASE ' + @databaseName + ' WITH RECOVERY'
ORDER BY backup_set_id

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