我有一个维护计划,假设要通过BACKUP文件夹并删除超过5天的所有.bak。当我运行这个工作时,它会给我一个成功的消息,但旧的.bak文件仍然存在。
我已尝试过以下问题:https://serverfault.com/questions/245493/sql-maintenance-cleanup-task-success-but-not-deleting-files
Result is column IsDamaged = 0
我已通过以下问题进行了验证,这不是我的问题:https://serverfault.com/questions/94094/maintenance-cleanup-tasks-running-successfully-but-not-deleting-back-up-files
我也尝试删除工作和维护计划并重新创建,但无济于事。
有什么想法吗?
答案 0 :(得分:50)
尝试以下检查:
答案 1 :(得分:5)
有同样的问题。罪魁祸首是.Bak扩展名。把它变成Bak,你应该很好。
答案 2 :(得分:5)
这通常是由权限问题引起的。当权限阻止运行步骤的帐户删除文件时,清理任务似乎没有记录任何有用的内容。
您可以按如下方式验证:
答案 3 :(得分:2)
确保在正确的SQL Server中创建维护计划。 更详细,
如果您有SQL Server 2005并且您创建了maint。这个SQL Server 2005下的计划, 您只能“清理”(删除)从SQL Server 2005 Server生成/备份的备份(bak)和事务日志(trn)。 如果您试图从2008,2008 R2,2012或更新版本中清理那些bak或trn,它将无法正常工作。 (由于文件头信息)。也就是说,2005年无法识别2008年或更新格式的文件!
但是,您始终可以通过创建maint来清理这些文件。 SQL Server 2008下的计划,并从2005〜2012年(测试)“清理”这些文件。
这意味着, 1. 2005年只能用2005格式清理bak / trn 2. 2008年可以清理2005~2012格式
我没有机会测试2000(太旧)或2014(太新)。 但我猜2014年应该从2008年开始。
答案 4 :(得分:2)
我会给我2美分,刚刚讨论过这个问题,使用SQL 2012进行新部署。 备份作业正常工作,但是日志和旧备份的清理任务虽然已成功完成但没有做任何事情。
我认为在这些愚蠢的事情中存在的问题,我已将扩展名设为.bak
和.txt
,但只要我将其更改为.BAK
和.TXT
(在首都)它开始起作用了。
希望能帮助解决类似问题的人。
答案 5 :(得分:1)
我之前遇到过类似的工作问题。我遇到的没有删除的情况是因为当我浏览GUI时没有明确设置位置。即使我没有改变任何东西,当没有具体列出路径位置时,就好像它不知道在哪里处理删除所以没有发生任何删除。它备份很好,一切都很好,但它不会像向导/表单中指定的那样进行清理。
答案 6 :(得分:1)
我遇到了同样的问题,我也试图解决它。我想我尝试了所有组合,但它没有用。请注意,xp_delete_file没有记录,显然非常错误。
但我所做的并且可以帮助您的步骤是将步骤更改为PowerShell步骤。
您可以使用以下内容删除超过30天的文件
get-childitem c:\ sqlbackup -recurse |其中{$ .lastwritetime -lt(get-date).adddays(-30)-and -not $ .psiscontainer} |%{remove-item $ _。fullname -force -whatif}
请注意添加的-whatif,以便您进行测试。
但在我的情况下,这还不够。 PowerShell方法存在权利问题。运行SQL代理的帐户无权删除文件。正确设置权限时,一切都像魅力一样。
祝你好运答案 7 :(得分:1)
我发现我必须将频率从1周更改为几天,然后它会删除旧备份。为什么,我不知道,但确实解决了这个问题。
答案 8 :(得分:0)
要把我的2美分扔进去...当我试图删除维护文件时,我失败了。虽然我已正确设置扩展名和文件位置,但我忘记将其从“备份文件”设置为“维护计划文件”。
答案 9 :(得分:0)
问题让我发疯了。我有一个解决方法,但其他服务器使用维护计划没有问题。
我复制了T-SQL
脚本,并将dbo
更改为sys
。这个对我有用。读取脚本
Create Procedure bk_removeTLogBackupFiles
as
Declare @DeleteDate varchar(50)
Declare @DeleteExecuteSQL varchar(1000)
Set @DeleteDate = cast(DATEADD(day,-7,GetDate()) as varchar(50))
Set @DeleteExecuteSQL =
'EXECUTE master.sys.xp_delete_file 0,N''\\Backupserver\BackupFolder\' + @@servername + '\User'',N''trn'',N' + quotename(@DeleteDate,'''') + ',1'
Execute (@DeleteExecuteSQL)
这是一个通用脚本,我用于所有备份到服务器\文件夹中的安全性的某个服务器,按文件夹分类到用户系统的文件夹等。 不多,但它对我有用。