数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

使用FORFILES命令来删除SQL Server备份


发布日期:2021年06月10日
 
使用FORFILES命令来删除SQL Server备份

专家解答

虽然有很多种方式可以解决这个问题但是我们可以用TSQL代码来处理这个文件删除过程我用xp_cmdshell命令和FORFILES命令来处理类似于你所列出的过程可以从Microsoft TechNet中获得FORFILES的可靠信息但是在这篇文章中我将涉及FORFILES大量的结构和使用方法来达到你的目的

该FORFILES命令将选取文件的一个子集并且针对这个子集执行一个命令这个命令需要下面的参数和接受下面的变量

参数

参数名

描述

/p

路径

/m

检索屏蔽 (默认情况下是 **)

/s

如果包含这个参数那么子目录将会被递归地检索

/c <command>

针对结果集中的每一个文件执行命令命令必须包含在双引号中默认情况是cmd c/ echo @file

/d

针对文件选择的日期范围把最新的更改日期当作文件标准当/d参数是MM/DD/YYYY格式时满足指定的+/日期标准的文件也包含在内当文件格式是smallint ( )文件+/文件并且带着一个更改日期+/从当前日期到该日期的时间数目将会包含在这个文件结果集中

变量

变量名

描述

@FILE

文件名

@FNAME

无扩展的文件名

@EXT

文件扩展名

@PATH

文件绝对路经

@RELPATH

文件的相对路径

@ISDIR

如果文件类型是一个目录那么判断是否是TRUE

@FSIZE

文件大小(用字节衡量)

@FDATE

文件上的最新更改日期邮戳

@FTIME

文件上的最新更改时间邮戳

利用这些参数可以构造下面的例子来解决你删除备份脚本文件的难题你可以基于更改时间/日期或者备份类型来创建脚本你甚至可以构造能够同时参照两种标准的脚本

我们将仔细看看这些可能的脚本记住你将从TSQL代码内部执行这个过程所以你需要在一个xp_cmdshell访问中以EXEC xp_cmdshell FORFILES COMMAND的格式总结这些语句请注意在所有的例子中我都会使用/Q 和 /F标签来作为删除命令这意味着这个命令将使用安静模式(/Q)甚至删除只能读的文件(/F)

例子

当文件更改日期晚于//删除所有C:\Backup目录和它子目录下的sql文件

EXEC xp_cmdshell FORFILES /p c:\BACKUP /s /m *sql /d // /c CMD /C del /Q /F @FILE

当文件更改日期多于天时删除所有C:\Backup目录和它的子目录下的sql文件

EXEC xp_cmdshell FORFILES /p c:\BACKUP /s /m *sql /d /c CMD /C del /Q /F @FILE

当文件更改日期多于天且文件名以F_打头时删除所有C:\Backup目录和它的子目录下的sql文件

EXEC xp_cmdshell FORFILES /p c:\BACKUP /s /m F_*sql /d /c CMD /C del /Q /F @FILE

上一篇:答疑:SQL Server 2008的升级与部署

下一篇:保卫你的SQL Server数据库