T-SQL数据库备份清理脚本记录要删除之前要删除的文件

时间:2017-04-12 20:58:16

标签: sql tsql sql-server-2008-r2

我遇到了SQL维护计划清理任务的问题,每晚都没有删除一个特别大的数据库备份,它工作了几天然后失败然后重新开始工作,它总能在小型数据库上正常工作。

我研究了这个维护计划清理任务问题,并尝试了一切我能想到的工作,将扩展匹配更改为*,在文件夹路径末尾添加了\,更改了年龄no NONE所以所有文件都将被删除年龄,有时候这个备份有时候不会被删除。

所以我使用下面的脚本实现了这个SQL JOB以查看是否可行,但同样的问题再次出现,间歇性地不删除大型备份文件,当我手动运行任务时,似乎总是将其删除。

我的问题是,有没有办法首先获得符合删除条件的文件列表,并在实际尝试删除文件之前将它们写入日志文件,这样我至少可以看出是否由于某种原因大型备份文件首先与要删除的条件不匹配。

在不使用xp_cmdshell且不使用批处理或PowerShell脚本的情况下使用T-SQL删除旧备份文件的任何帮助都将不胜感激。

declare @dt datetime
select @dt=dateadd(hh,-22,getdate())
EXECUTE master.dbo.xp_delete_file 0,N'Z:\SQLBackups\',N'BAK',@dt,1

我遇到问题的SQL服务器版本:

Microsoft SQL Server Management Studio 10.50.4042.0

Microsoft Analysis Services客户端工具10.50.4042.0

Microsoft数据访问组件(MDAC)6.1.7601.17514

Microsoft MSXML 3.0 6.0

Microsoft Internet Explorer 9.10.9200.17609

Microsoft .NET Framework 2.0.50727.5485

操作系统6.1.7601

1 个答案:

答案 0 :(得分:0)

创建一个powershell脚本来删除文件并找到错误“另一个进程正在使用该文件”我创建了这个脚本来检查使用handle64.exe程序的进程,发现它是Commvault代理CLBackup.exe那是锁定文件。

备份计划冲突是导致问题的原因。

.icon-list {
  align-items: center;
}

.icon-list .icon {
  display: inline-block;
  align-items: center;
}

.icon-list .icon a {
  display: block; /* so it has solid area to touch */
  padding: .5rem 1rem;
  border: 1px solid green;
}

.icon-list .icon a:hover {
  background: lightgreen;
}