如何恢复一批事务日志而不是逐个恢复

如何恢复一批事务日志而不是逐个恢复

我有一个 SQL Server 数据库,每 10 分钟备份一次事务日志,并隔夜进行一次完整备份。

使用 SQL 2008 Management Studio,我们似乎必须逐个选择每个事务日志。有没有办法将其指向目录?

我正在考虑每天运行几次差异备份,这可能会抵消部分影响,但逐个检查数十/数百个文件似乎非常耗时。编写代码来尝试编写脚本似乎与我们的核心竞争力相去甚远。

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

答案1

没有办法在 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

答案2

下面是一个关于如何使用 TSQL 从目录中的备份文件自动生成 SQL Server 恢复脚本的示例:

从目录中的备份文件自动生成 SQL Server 恢复脚本

自动生成 SQL Server 数据库恢复脚本

答案3

你只需要一个 SQL 语句列表,例如......

RESTORE LOG AdventureWorks FROM DISK = 'C:\AdventureWorks_1.TRN' WITH NORECOVERY
GO
RESTORE LOG AdventureWorks FROM DISK = 'C:\AdventureWorks_2.TRN'
GO

因此,您可以编写一个 VB 脚本,它可轻松从给定文件夹为您生成此 SQL。以下是示例http://blogs.lessthandot.com/index.php/DataMgmt/DBAdmin/MSSQLServerAdmin/restoring-multiple-transaction-log-backu

一旦创建了 SQL,您只需检查它是否正确并运行它。

答案4

这个更好,使用 std store pro。由 Wecks 描述:https://www.sqlservercentral.com/forums/topic/automation-of-tlog-shipping

相关内容