MS SQL差异备份策略

我们最近在我们的一台服务器上出现故障。 服务器无法访问,我们可以从中获取任何数据。 我们有一个备份计划,每隔一天进行一次完整的备份,然后每6小时进行一次差异备份。

我使用丛林磁盘从服务器获取数据到外部存储,这是我们这次失败了。 在diffrential备份完成后,Jungle Disk将文件复制到云端将会有一段时间的延迟。 而在这种情况下,我们最后的差异备份是在1小时之前完成的,因此使我们以前的差异备份无用。

有没有什么办法可以设置差异备份,这样我不一定要有最新版本的差异备份,只是恢复备份,我可以访问这么多的差异备份?

我知道老线程,但是我在用JungleDisk研究一个不同的问题时碰到了这个问题。

OP所带来的问题是每个差异都是与上一个相同的名称,而JungleDisk会用新文件覆盖旧的基于云的备份。 不是一个问题,除非最后一次备份到云中失败……这是他的情况。

但是OP的问题的答案是肯定的,在您的维护计划中,使用date和时间戳来重命名每个差异备份。 例如,这里的计划创build一个像这样的文件名:

MyDatabaseName_Diff_2012-08-20T01-35-01.BAK

DECLARE @name VARCHAR(50) -- database name DECLARE @path VARCHAR(256) -- path for backup files DECLARE @fileName VARCHAR(256) -- filename for backup DECLARE @fileDate VARCHAR(20) -- used for file name DECLARE @fileNameNoExt VARCHAR(256) -- Used to name the backup from the NAME parameter DECLARE @subDir VARCHAR(256) -- Used to create the subdirectory for the backup DECLARE @backupSetId as int DECLARE @noBackupErrorMessage VARCHAR(256) SET @path = 'C:\Path\To\Your\Backups\' SELECT @fileDate = REPLACE(REPLACE(CONVERT(VARCHAR(20),GETDATE(),126), ':', '-'), '.', '') -- Exclude the system databases, as well as any others you don't want to back up. DECLARE db_cursor CURSOR FOR SELECT name FROM master.dbo.sysdatabases WHERE name NOT IN ('master','model','msdb','tempdb') OPEN db_cursor FETCH NEXT FROM db_cursor INTO @name WHILE @@FETCH_STATUS = 0 BEGIN SET @fileName = @path + @name + '\' + @name + '_Diff_' + @fileDate + '.BAK' SET @fileNameNoExt = @name + '\' + @name + '_Diff_' + @fileDate SET @subDir = @path + @name EXECUTE master.dbo.xp_create_subdir @subdir BACKUP DATABASE @name TO DISK = @fileName WITH DIFFERENTIAL, NOFORMAT, NOINIT, NAME = @fileNameNoExt, SKIP, NOREWIND, NOUNLOAD, STATS = 10 -- Now verify the backup SET @noBackupErrorMessage = N'Verify failed. Backup information for database ' + @name + ' not found.' select @backupSetId = position from msdb..backupset where database_name=@name and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=@name ) if @backupSetId is null begin raiserror(@noBackupErrorMessage, 16, 1) end RESTORE VERIFYONLY FROM DISK = @fileName WITH FILE = @backupSetId, NOUNLOAD, NOREWIND FETCH NEXT FROM db_cursor INTO @name END CLOSE db_cursor DEALLOCATE db_cursor 

但是,如果您正在使用JungleDisk,则可能会发现备份链中断,无法进行差异备份!

保护您的SQL Server数据从光盘开始 – 将数据文件放在专用RAID驱动器(理想情况下为RAID10)上,将事务日志文件放在另一个RAID10驱动器上,将TEMPDB放在其他位置。 这是出于性能原因,但也是可恢复性 – 如果其中一个驱动器出现故障,您就有机会了。 RAID应该允许重build,但是如果你的数据驱动器失败了,你应该能够从事务日志中获取最新的事务。

接下来是SQL Server备份 – 他们应该去一个单独的光盘,然后取下服务器,以磁带,或另一台服务器异地。 根据数据库的大小和维护时间的不同,每日完整备份可能是合适的 – 或每周完整备份。 除此之外,还可以经常进行事务日志备份(可能每小时),也可能根据数据库的大小进行差异备份。

最后一部分是检查。 经常通过在其他地方进行恢复来检查恢复。 检查备份是否以某种方式脱机。 testingtestingtesting