清理没有xp_cmdshell或维护计划的备份文件

背景:

我们有一个需要运行xp_cmdshell的备份脚本。 我决定在新服务器上,我们不打算启用xp_cmdshell。 当作业启动时,我启用了xp_cmdshell,并在最后closures。 问题是,如果完整备份启动并且小时日志备份运行并完成,则会closuresxp_cmdshell,每小时备份将失败。

这导致我试图检测工作是否正在运行等path。但是,有没有更好的方法来清理?

实际的问题是:

如何在成功执行备份作业后删除旧的备份文件?

它需要脚本,如果我得到正确的通知,这就排除了维护计划。

它不会使用xp_cmdshell来避免整个工作交互的事情,并遵循良好的做法。

最好的scheme是让它从备份脚本中执行,所以它会在成功备份后删除备份文件。 如果由于任何原因在备份中出现错误,则可以继续备份其他数据库。

猜测:也许一个PowerShell脚本会做的伎俩? 这可以通过脚本进入一个工作步骤,并有条件地执行成功…但是,如果我们中途失败,所有这一切都将在备份结束时发生 – 如果我们紧张,备份驱动器需要手动清理空间。

也许我只是检查是否每小时工作正在运行,当我打算在小时工中closuresxp_cmdshell。 我可能会去那, 但你会怎么做

在备份步骤之后,我在备份作业中添加一个作业步骤,并运行下面的代码版本。 这将删除任何超过1天的BAK文件。

declare @Ext NVARCHAR(4) ,@DelDt VARCHAR(19) ,@BackupPath VARCHAR(800) select @Ext = 'bak' ,@BackupPath = 'D:\SQLBAK' SELECT @DelDt = CONVERT(VARCHAR(19), DATEADD(hh, -24, GETDATE()), 126) EXEC master.dbo.xp_delete_file 0, @BackupPath, @Ext, @DelDt