首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MS SQL差异备份策略

MS SQL差异备份策略
EN

Server Fault用户
提问于 2010-07-14 08:49:37
回答 2查看 347关注 0票数 2

我们最近在一台服务器上发生了故障。服务器是不可访问的,我们可以从它获得任何数据。我们有一个备份计划,每隔一天进行一次完全备份,然后每6小时进行一次不同的备份。

我使用Jungle磁盘将数据从服务器获取到外部存储,而这一次失败了。在不同备份被finnished和Jungle磁盘将文件复制到云端之间总是会有延迟。在这种情况下,我们的最后一个diff备份是在1小时前完成的,因此我们以前的所有diff备份都是无用的。

是否有任何方法来设置diff备份,这样我就不必总是拥有diff备份的最新版本,并且只需要使用我可以访问的这么多diff备份来恢复备份?

EN

回答 2

Server Fault用户

发布于 2012-09-12 19:13:49

老线程,我知道,但我在研究JungleDisk的另一个问题时遇到了这个问题。

OP遇到的问题是,所使用的每个差异都与最后一个相同的名称,并且JungleDisk用新文件覆盖了旧的基于云的备份。没有问题,除非云failed...which的最后一次备份是在他的情况下发生的。

但是OP问题的答案是肯定的,在您的维护计划中,用日期和时间戳重命名每个差异备份。例如,下面的计划创建了一个文件名,如:

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

代码语言:javascript
复制
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,您可能会发现备份链已经损坏,您无法进行差异备份!

票数 3
EN

Server Fault用户

发布于 2010-07-14 10:45:16

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

接下来是Server备份--它们应该转到一个单独的磁盘上,然后从服务器上取出磁带,或者从另一个服务器移出站点。根据数据库的大小和维护窗口的不同,可能适合进行完整的每日备份--或者每周备份一次。在此基础上,设置频繁的事务日志备份(可能每小时进行一次),并根据数据库的大小进行差异。

最后一部分是检查。经常通过在其他地方执行还原来检查还原。检查备份是否会以某种方式离开现场。试验试验试验

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/160242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档