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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用FORFILES命令来删除SQL Server备份相关的知识,希望对你有一定的参考价值。

参考技术A 我用xp_cmdshell命令和FORFILES命令来处理类似于你所列出的过程。可以从Microsoft
TechNet中获得FORFILES的可靠信息,但是在这篇文章中,我将涉及FORFILES大量的结构和使用方法来达到你的目的。
  该FORFILES命令将选取文件的一个子集并且针对这个子集执行一个命令。这个命令需要下面的参数和接受下面的变量。
  参数  参数名描述  /p路径  /m检索屏蔽
(默认情况下是
*.*)
  /s如果包含这个参数,那么子目录将会被递归地检索。
  /c针对结果集中的每一个文件执行命令,命令必须包含在双引号中,默认情况是"cmd
c/
echo
@file"
  /d针对文件选择的日期范围,把最新的更改日期当作文件标准。当/d参数是MM/DD/YYYY格式时,满足指定的+/-日期标准的文件也包含在内。当文件格式是smallint
(-32,768
-
32,768)文件+/-文件并且带着一个更改日期+/-时,从当前日期到该日期的时间数目将会包含在这个文件结果集中。
  变量  变量名描述
  @FILE文件名
  @FNAME无扩展的文件名
  @EXT文件扩展名
  @PATH文件绝对路经
  @RELPATH文件的相对路径
  @ISDIR如果文件类型是一个目录,那么判断是否是TRUE
  @FSIZE文件大小(用字节衡量)
  @FDATE文件上的最新更改日期邮戳
  @FTIME文件上的最新更改时间邮戳
  利用这些参数可以构造下面的例子来解决你删除备份脚本文件的难题。你可以基于更改时间/日期或者备份类型来创建脚本。你甚至可以构造能够同时参照两种标准的脚本。
  我们将仔细看看这些可能的脚本。记住,你将从T-SQL代码内部执行这个过程,所以你需要在一个xp_cmdshell访问中以EXEC
xp_cmdshell
'FORFILES
COMMAND'的格式总结这些语句。请注意,在所有的例子中我都会使用/Q

/F标签来作为删除命令。这意味着这个命令将使用安静模式(/Q)甚至删除只能读的文件(/F)。
  例子  当文件更改日期晚于10/18/2008时,删除所有C:Backup目录和它子目录下的.sql文件。
  EXEC
xp_cmdshell
'FORFILES
/p
c:BACKUP
/s
/m
*.sql
/d
10/18/2008
/c
"CMD
/C
del
/Q
/F
@FILE"'
  当文件更改日期多于30天时,删除所有C:Backup目录和它的子目录下的.sql文件。
  EXEC
xp_cmdshell
'FORFILES
/p
c:BACKUP
/s
/m
*.sql
/d
-30
/c
"CMD
/C
del
/Q
/F
@FILE"'
参考技术B sql
server
2000和sql
server
agent是作为windows服务运行的。每个服务必须与一个windows帐户相关联,并从这个帐户中衍生出安全性上下文。sql
server允许sa登录的用户(有时也包括其他用户)来访问操作系统特性。这些操作系统调用是由拥有服务器进程的帐户的安全性上下文来创建的。如果服务器被攻破了,那么这些操作系统调用可能被利用来向其他资源进行攻击,只要所拥有的过程(sql
server服务帐户)可以对其进行访问。因此,为sql
server服务仅授予必要的权限是十分重要的。
我们推荐您采用下列设置:
1)
sql
server
engine/mssqlserver
如果拥有指定实例,那么它们应该被命名为mssql$instancename。作为具有一般用户权限的windows域用户帐户运行。不要作为本地系统、本地管理员或域管理员帐户来运行。
2)
sql
server
agent
service/sqlserveragent
如果您的环境中不需要,请禁用该服务;否则请作为具有一般用户权限的windows域用户帐户运行。不要作为本地系统、本地管理员或域管理员帐户来运行。
重点:
如果下列条件之一成立,那么sql
server
agent将需要本地windows管理员权限:
sql
server
agent使用标准的sql
server身份验证连接到sql
server(不推荐);
sql
server
agent使用多服务器管理主服务器(msx)帐户,而该帐户使用标准sql
server身份验证进行连接;
sql
server
agent运行非sysadmin固定服务器角色成员所拥有的microsoft
activex脚本或
cmdexec作业。
如果您需要更改与sql
server服务相关联的帐户,请使用
sql
server
enterprise
manager。enterprise
manager将为sql
server所使用的文件和注册表键设置合适的权限。不要使用microsoft管理控制台的“服务”(在控制面板中)来更改这些帐户,因为这样需要手动地调制大量的注册表键和ntfs文件系统权限以及micorsoft
windows用户权限。
帐户信息的更改将在下一次服务启动时生效。如果您需要更改与sql
server以及sql
server
agent相关联的帐户,那么您必须使用enterprise
manager分别对两个服务进行更改。

以上是关于如何使用FORFILES命令来删除SQL Server备份的主要内容,如果未能解决你的问题,请参考以下文章

forfiles结合域控定期删除文件

Windows forfiles(删除历史文件)

[转帖]FORFILES 的简单介绍。

windows下自动删除n天前的文件

Windows定时删除某天前文件的批处理脚本

如何摆脱扩展的“forfiles”变量中的双引号?