在磁盘上的前5天的SQL Server 2005备份?

我的目标很简单。 我想让SQL Server每天保持一个数据库的夜间备份5天。

所以每天晚上我都想要一个新的数据库备份,一个删除,这样我就可以在磁盘上滚动5天。

我正在尝试设置一个维护计划来处理这个工作,并且完成文件的保存(我想)。 我有备份被追加,所以一个单一的bak文件将包含滚动5天(不知道这将工作0,因为SQL将如何知道要删除,删除单个bak文件将删除所有的备份)。

正如你可以告诉为什么有问题搞清楚如何删除数据库的旧备份,以便Y只有磁盘上最新的5。

任何提示对我来说呢?

所build议的维修计划是一个很好的前进方向。 一种替代方法是使用一个调度像这样的存储过程的计划作业;

CREATE PROCEDURE backup_all_databases @path VARCHAR(255)='c:\backups\' AS DECLARE @name VARCHAR(50) -- database name DECLARE @fileName VARCHAR(256) -- filename for backup DECLARE @fileDate VARCHAR(20) -- used for file name DECLARE @dbIsReadOnly sql_variant -- is database read_only? DECLARE @dbIsOffline sql_variant -- is database offline? DECLARE db_cursor CURSOR FOR SELECT name FROM master.dbo.sysdatabases WHERE name NOT IN ('tempdb') AND version > 0 AND version IS NOT NULL OPEN db_cursor FETCH NEXT FROM db_cursor INTO @name WHILE @@FETCH_STATUS = 0 BEGIN SET @fileName = @path + @name + '.bak' -- + '_' + @fileDate + '.BAK' SET @dbIsReadOnly = (SELECT DATABASEPROPERTY(@name, 'IsReadOnly')) -- 1 = Read Only SET @dbIsOffline = (SELECT DATABASEPROPERTY(@name, 'IsOffline')) -- 1 = Offline IF (@dbIsReadOnly = 0 OR @dbIsReadOnly IS NULL) AND @dbIsOffline =0 BEGIN BACKUP DATABASE @name TO DISK = @fileName WITH INIT END FETCH NEXT FROM db_cursor INTO @name END CLOSE db_cursor DEALLOCATE db_cursor GO 

调整它以附加一个时间戳到备份文件名。 并添加您需要的任何expired或retaindays参数。 像BOBSbuild议的那样,您也可以使用维护清理任务来清除较旧的备份文件5天以上。 这给你每一天的个人备份。 无论您需要什么,您都可以在一天或一天​​一次的时间内每小时运行x次。

如果您正在使用维护计划,那么您可以将添加到计划中的“维护清理任务”用于在多天后清理BAK文件。 只需在“备份数据库任务”后面添加此任务,并将其configuration为删除大于5天的备份文件,那么您应该很好。

HTH,丹

在TSQL BACKUP命令中有两个可以设置的备份集选项。 有EXPIREDATE表示备份过期的date,RETAINDAYS表示保留备份的天数。 您将使用RETAINDAYS选项并将其设置为5天。 其余的备份过程将会完成。

在维护计划设置中,您应该在定义数据库备份任务时看到类似的选项。 您可以指示保留备份的时间。

维护计划中没有指示要保存的备份数量的选项。