SQL Server 2008 R2 备份计划未删除维护计划中设置的 X 天以前的文件

SQL Server 2008 R2 备份计划未删除维护计划中设置的 X 天以前的文件

我们已设置数据库维护计划,每晚对所有用户数据库进行一次完整备份。备份设置为七天后过期,并以文件扩展名“bak”备份到磁盘。

问题在于该作业不会删除任何超过七天的备份集(备份事务日志的作业也是如此)。

所有正在备份的数据库的恢复模型均设置为“完整”。

SQL Server 代理以本地系统身份登录,并且“SYSTEM”对保存这些备份的文件夹拥有完全权限。

手动运行作业时不会报告任何错误,并且日志文件中也没有错误。

如果我创建一个测试维护计划来删除目录中的文本文件并运行生成的 T-SQL,则命令将成功完成,但目录中的文本文件不会被删除。

EXECUTE master.dbo.xp_delete_file 0,N'D:\TEST',N'.txt'

我知道这是一个权利问题,但就我们这边来看一切还好。

有人有主意吗?

谢谢。

答案1

据我了解,您使用特殊的方法在维护计划中删除它们维护清理任务..或者通过“执行T-SQL语句任务”?虽然这没什么关系。

通过查看您的 SQL 语句,我认为它可能是文件扩展名:应该是没有点,只是其自身的扩展。

我怀疑这是权限问题,因为您首先能够创建备份。但请检查SQLServerMSSQLUser$...组是否具有完全访问权限——这就是我对所有“备份”位置的访问权限(如果您在初始设置期间将该文件夹设置为默认备份目标,则应该自动设置这些权限)。


据我所知xp_delete_file,它没有文档记录,而且我在 SQL 书籍中也没有找到对它的引用。显然,SQL Server 在删除文件之前会检查它是什么文件——它只适用于自己的文件(我猜是为了防止错误使用/安全)。以下是格式和参数:

EXECUTE master.sys.xp_delete_file
0, -- FileTypeSelected (0 = FileBackup, 1 = FileReport)
N'D:\SQLbackups\', -- folder path (trailing slash)
N'bak', -- file extension which needs to be deleted (no dot)
N'2011-06-15T15:10:04', -- date prior which to delete
1 -- subfolder flag (1 = include files in first subfolder level, 0 = not)

通过查看示例 SQL 语句,我发现了很多差异:

  • 在第一个参数中你有 0(文件备份)但试图删除文本文件
  • 文件扩展名应排除点
  • 您应该提供到期日期(超过该日期的文件将被删除)

关联:http://sqlblog.com/blogs/andy_leonard/archive/2009/03/11/xp-delete-file.aspx

答案2

这只是一个小例子,但在创建维护计划时,我在文件扩展名框中包含了“.”,这让我很头疼。检查一下是否用的是“.bak”而不是“bak”。

相关内容