在维护计划期间删除其他文件

Dav*_*veD 5 backup sql-server-2012 maintenance-plans

我有一个 SQL Server 2012 维护计划,它执行正常的操作(重建索引和更新统计信息、备份数据库、删除超过 X 天的 .bak 文件等)。除了一项维护清理任务外,一切正常:

维护清理任务截图

应该是删除所有意外留在每晚备份目录中的 .7z 档案(相当于 .zip 或 .rar)(尽管我们尽了最大努力,但最终还是有些人将这些文件留在服务器上......),但是E:\Backups\foo\bar.7z在维护计划运行后,子目录(例如)中仍然存在旧的 .7z 文件。

SQL Server 日志中没有错误。

我怀疑这是因为“删除以下类型的文件:备份文件”选项限制了可以删除的文件类型。我还尝试使用 7z 扩展名将其更改为“维护计划文本报告”,但没有任何更改。

是否可以让维护计划在维护清理任务期间删除任意(非 SQL Server)文件?如果是这样,知道我做错了什么吗?

KAS*_*DBA 3

根据此处的MS

维护清理任务会删除与维护计划相关的文件,包括数据库备份文件和维护计划创建的报告。

通过使用维护清理任务,包可以删除指定服务器上的备份文件或维护计划报告。维护清理任务包括用于删除特定文件或删除文件夹中的一组文件的选项。您可以选择指定要删除的文件的扩展名。

我没有通过维护计划删除任何其他扩展文件,并且从上面看来,非 sql 文件可能无法通过 Maint'ce 计划删除:

我们使用的是 VB 脚本并通过 SQL 代理作业调度它:

选择类型为:- 在 SQL 代理作业中为以下代码创建步骤时键入 ActiveX scipt:

On Error Resume Next   
    Dim fso, folder, files, sFolder, sFolderTarget     
    Set fso = CreateObject("Scripting.FileSystemObject")   

    'location of the  files 
    sFolder = "B:\FolderA\ABC\"

    Set folder = fso.GetFolder(sFolder)   
    Set files = folder.Files     

    'used for writing to textfile - generate report on files deleted 
    Const ForAppending = 8 

    'you need to create a folder named "scripts" for ease of file management &  
    'a file inside it named "LOG.txt" for delete activity logging 
    Set objFile = fso.OpenTextFile(sFolder & "\Report\LOG.txt", ForAppending) 

    objFile.Write "================================================================" & VBCRLF & VBCRLF 
    objFile.Write "                     FILE REPORT                " & VBCRLF 
    objFile.Write "                     DATE:  " &    FormatDateTime(Now(),1)   & "" & VBCRLF 
    objFile.Write "                     TIME:  " &    FormatDateTime(Now(),3)   & "" & VBCRLF & VBCRLF 
    objFile.Write "================================================================" & VBCRLF  

    'iterate thru each of the files in the respective folder 
    For Each itemFiles In files  
       'retrieve complete path of file for the DeleteFile method and to extract  
            'file extension using the GetExtensionName method 
       a=sFolder & itemFiles.Name 

       'retrieve file extension  
       b = fso.GetExtensionName(a) 
           'check if the file extension is abc(whatever is the extension of you're file
           If uCase(b)="abc" Then 

               'check if the files are older than 1days 
               If DateDiff("d",itemFiles.DateCreated,Now()) >= 1 Then 

                   'Delete any old files to cleanup folder 
                   fso.DeleteFile a  
                   objFile.WriteLine "FILE DELETED: " & a 
               End If 
           End If 
    Next   

    objFile.WriteLine "================================================================" & VBCRLF & VBCRLF

    objFile.Close 

    Set objFile = Nothing 
    Set fso = Nothing 
    Set folder = Nothing 
    Set files = Nothing
Run Code Online (Sandbox Code Playgroud)

注意* 上述脚本的工作原理是,您需要在基本文件夹位置中创建文件夹Report ,并在该位置创建文件LOG.txt,该文件捕获或记录进程删除的文件的详细信息。您可以使用我们用来跟踪的附加功能,或者根据需要修改脚本!