Sql server 使用Ola Hallengren的备份脚本,我希望每小时备份一次,但每天只保留1次备份,备份时间超过1天
我们每小时都有一次完整备份,即使我们将Ola Hallengren语句设置为“cleanuptime=168”,这会删除>一周的旧备份,但备份量也会增加。 这仍然有太多的备份需要保留,而且我们的磁盘空间有限。 我们不想更改备份频率或类型。 我们需要对所有早于24小时的备份进行清理,但每天在午夜执行一次备份除外。Sql server 使用Ola Hallengren的备份脚本,我希望每小时备份一次,但每天只保留1次备份,备份时间超过1天,sql-server,sql-server-2012,backup-strategies,Sql Server,Sql Server 2012,Backup Strategies,我们每小时都有一次完整备份,即使我们将Ola Hallengren语句设置为“cleanuptime=168”,这会删除>一周的旧备份,但备份量也会增加。 这仍然有太多的备份需要保留,而且我们的磁盘空间有限。 我们不想更改备份频率或类型。 我们需要对所有早于24小时的备份进行清理,但每天在午夜执行一次备份除外。 我们考虑过使用文件表查看备份文件夹,但更愿意使用本机清理过程。我们希望通过维护计划甚至Ola的脚本实现什么 我最后写了一个脚本,每天凌晨1:30作为作业运行。如果你能想到任何问题,请告诉
我们考虑过使用文件表查看备份文件夹,但更愿意使用本机清理过程。我们希望通过维护计划甚至Ola的脚本实现什么 我最后写了一个脚本,每天凌晨1:30作为作业运行。如果你能想到任何问题,请告诉我
declare @date as datetime
declare @execsql as nvarchar(max)
Declare mycursor cursor for
WITH BACKUPS AS (
SELECT
msdb.dbo.backupset.backup_start_date,
msdb.dbo.backupmediafamily.physical_device_name, ROW_NUMBER() OVER (PARTITION BY CONVERT(CHAR(100), SERVERPROPERTY('Servername')), msdb.dbo.backupset.database_name, CAST(msdb.dbo.backupset.backup_start_date AS date) ORDER BY backup_start_date) AS RN
FROM msdb.dbo.backupmediafamily
INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id
where physical_device_name like '%_MSDB%')
SELECT backup_start_date, 'xp_cmdshell ''del ' + physical_device_name + ''''
FROM BACKUPS B
WHERE backup_start_date < DATEADD(DAY,-1,CAST(GETDATE() AS DATE))
AND RN<>1
ORDER BY backup_start_date
open mycursor
fetch next from mycursor into @date, @execsql
while @@FETCH_STATUS = 0
begin
print @date
print @execsql
exec(@execsql)
fetch next from mycursor into @date, @execsql
end
close mycursor
deallocate mycursor
您是否尝试过“cleanuptime=24”,这里的事务日志不是比每小时进行一次完整备份更好吗?@MattEvans这将删除我们希望每天最多保留一周的1次备份。@Lamu是的,但对于其他系统进程,我们无法更改当前设置。但您无法修复存储问题?为什么你不能改变你的设置l,因为那样可以解决这里的问题。