SQL维护清理任务工作但不删除

时间:2011-03-16 15:07:50

标签: sql-server sql-server-2008 maintenance-plan

我有一个维护计划,假设要通过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

我也尝试删除工作和维护计划并重新创建,但无济于事。

有什么想法吗?

10 个答案:

答案 0 :(得分:50)

尝试以下检查:

  1. 使用*。*作为文件扩展名或bak不带点,如果其他问题也是正确的话,我发现这两点都有效。
  2. 确保路径只是备份的路径,但末尾有反斜杠。
  3. 首先在创建备份时检查验证是否已勾选。

答案 1 :(得分:5)

有同样的问题。罪魁祸首是.Bak扩展名。把它变成Bak,你应该很好。

答案 2 :(得分:5)

这通常是由权限问题引起的。当权限阻止运行步骤的帐户删除文件时,清理任务似乎没有记录任何有用的内容。

您可以按如下方式验证:

  • 在SQL Server Management Studio中,右键单击维护计划并选择“修改”
  • 找到用于删除bak文件的维护清理任务,然后单击“查看T-SQL”按钮。将脚本复制到剪贴板 - 它将类似于“EXECUTE master.dbo.xp_delete_file ...”
  • 使用对包含备份的文件夹具有所需权限的Windows帐户连接到服务器并运行SQL
  • 如果bak文件得到清理,则表明维护计划任务配置正确并且您有权限问题。
  • 在Management Studio中,打开作业的属性窗口(SQL Server代理>作业),单击第一步的“编辑”按钮。 “运行方式”部分将指示正在运行作业的帐户。

答案 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)

这是一个通用脚本,我用于所有备份到服务器\文件夹中的安全性的某个服务器,按文件夹分类到用户系统的文件夹等。 不多,但它对我有用。