如何删除SQL2005过期的数据库备份文件呢?

来源:互联网 发布:企业建站用什么cms 编辑:程序博客网 时间:2024/05/10 14:00

 

--如何删除SQL2005过期的数据库备份文件呢?

SQL2005数据库中,不可以自动删除过期的备份文件,所以借用第三方插件完成此功能。

 

--方式一:通过Forfiles删除指定目录下过期的备份文件

/*--用法详解

D:/>forfiles/?

 

FORFILES [/Ppathname] [/M searchmask] [/S]

         [/C command] [/D [+ | -] {yyyy-MM-dd |dd}]

 

描述:

    选择一个文件(或一组文件)并在那个文件上

    执行一个命令。这有助于批处理作业。

 

参数列表:

    /P   pathname      表示开始搜索的路径。默认文件夹是当前工作的

                        目录(.)

 

    /M   searchmask    根据搜索掩码搜索文件。默认搜索掩码是'*'

 

    /S                  指导forfiles递归到子目录。像"DIR/S"

 

    /C   command       表示为每个文件执行的命令。命令字符串应该

                        用双引号括起来。

 

                        默认命令是"cmd/c echo @file"。下列变量

                        可以用在命令字符串中:

                        @file    - 返回文件名。

                        @fname   - 返回不带扩展名的文件名。

                        @ext     - 只返回文件的扩展。

                        @path    - 返回文件的完整路径。

                        @relpath - 返回文件的相对路径。

                        @isdir   - 如果文件类型是目录,返回"TRUE"

                                   如果是文件,返回"FALSE"

                        @fsize   - 以字节为单位返回文件大小。

                        @fdate   - 返回文件上一次修改的日期。

                        @ftime   - 返回文件上一次修改的时间。

 

                        要在命令行包括特殊字符,字符请以0xHH

                        形式使用十六进制代码(例如,x09tab)

                        内部CMD.exe命令前面应以"cmd/c" 开始。

 

    /D   date          选择文件,其上一次修改日期大于或等于(+)

                        或者小于或等于(-)"yyyy-MM-dd"格式指定的日期;

                        或选择文件,其上一次修改日期大于或等于(+)

                        当前日期加"dd"天,或者小于或等于(-)当前

                        日期减"dd"天。有效的"dd"天数可以是

                        0 - 32768 范围内的任何数字。如果没有指定,

                        "+" 被当作默认符号。

 

    /?                  显示帮助消息。

 

例如:

    FORFILES /?

    FORFILES

    FORFILES /P C:/WINDOWS /S /M DNS*.* 

       --显示C:/WINDOWS目录及子目录下DNS开头的所有文件名

    FORFILES /S /M *.txt /C "cmd /c type@file | more"

       --显示当前目录下所有TXT文件的内容

    FORFILES /P C:/ /S /M *.bat 

       --显示C盘目录下及子目录下所有文件后缀名为bat的文件名

    FORFILES /D -30 /M *.exe

       --显示当前目录下修改日期小于等于天前的exe文件名

             /C "cmd /c echo @path 0x09 30前就被更改。" 

                  --显示当前目录下所有文件的完整路径并在后面追加30 前就被更改的文字

    FORFILES /D 2001-01-01 

       --显示当前目录下修改日期大于等于-01-01的文件名(含文件夹名)

             /C "cmd /c echo @fname 2001年月日就是新的。" 

                  --显示当前目录下所有文件名并在后面追加30 前就被更改的文字

    FORFILES /D +2009-8-18 /C "cmd /c echo@fname 今天是新的。"

       --显示当前目录下修改日期大于等于-8-18的文件名并在后面追加今天是新的的文字

    FORFILES /M *.exe /D +1 

       --显示当前目录下修改日期大于等于明天的exe文件名

    FORFILES /S /M *.doc /C "cmd /c echo@fname @fsize" 

       --显示当前目录及子目录下所有doc文件的文件名和文件大小

    FORFILES /M *.txt /C "cmd /c if@isdir==FALSE notepad.exe @file"

       --打开当前目录下txt文件,不含子文件。(注意变量isdir后面的FALSE必须为大写)

 

*/

 

 

目的:删除目录i:/sqldataup中天前的.bak文件:

步骤:

1、定义FORFILES批处理脚本如下:

C:/>FORFILES /P i:/sqldataup /M *.bak /C "cmd /Cdel /Q @path" /d -5

如果执行成功则返回当前盘符C:/>

--如果没有需要删除的文件则返回信息错误: 用指定的搜索标准没有找到文件。比如:

--C:/>FORFILES/P i:/sqldataup /M *.bak /C "cmd /C del /Q @path" /d -5

--错误: 用指定的搜索标准没有找到文件。

 

2、通过计划任务调用批处理脚本如下图所示:

 

 

 

3、当然也可以用SQLAgent调用CMDEXEC完成批处理作业。

比如新建作业定时执行下面语句即可

 

/* --因为SQL2005默认是没有开启'xp_cmdshell'组件,开启方法如下

sp_configure'show advanced options',1

reconfigure

go

sp_configure'xp_cmdshell',1

reconfigure

go

*/

EXEC xp_cmdshell 'FORFILES /P i:/sqldataup /M *.bak /C "cmd /C del /Q@path" /d -5'

至于如何新建作业并利用SSIS包制定控制流,参考文章。

 

方式二:如果在SQL2008中因为默认安装Powershell 1.0程序,故可以用Powershell编写脚本来完成定时删除过期文件。

在windows中文站版主Anders的确认下,PS中脚本如下:

 

PS I:/> $Time= (get-date).AddDAYS(-7)

PS I:/> ri i:/sqldataup/*.bak | ?{$_.LastWriteTime=$Time}

 



原创粉丝点击