Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用Ola Hallengren的备份脚本,我希望每小时备份一次,但每天只保留1次备份,备份时间超过1天_Sql Server_Sql Server 2012_Backup Strategies - Fatal编程技术网

Sql server 使用Ola Hallengren的备份脚本,我希望每小时备份一次,但每天只保留1次备份,备份时间超过1天

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 Hallengren语句设置为“cleanuptime=168”,这会删除>一周的旧备份,但备份量也会增加。 这仍然有太多的备份需要保留,而且我们的磁盘空间有限。 我们不想更改备份频率或类型。 我们需要对所有早于24小时的备份进行清理,但每天在午夜执行一次备份除外。
我们考虑过使用文件表查看备份文件夹,但更愿意使用本机清理过程。我们希望通过维护计划甚至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,因为那样可以解决这里的问题。