Alte Backupdateien löschen?

23/10/2007 - 11:43 von Max Göke | Report spam
Hab mal eine Frage:

Ist es möglich via T-SQL (SQL 2005) Backupdatein zu löschen die àlter als
sind UND wo das Archivattribut nicht mehr gesetzt ist? Idealerweise
rekursiv in allen Unterordnern des Hauptbackupordners.

Falls ja - hat jemandevtl. ein Codebeispiel?

Viele Grüße

Max
 

Lesen sie die antworten

#1 Henry Habermacher
23/10/2007 - 16:15 | Warnen spam
Hallo Max

Max Göke wrote:
Ist es möglich via T-SQL (SQL 2005) Backupdatein zu löschen die àlter als
sind UND wo das Archivattribut nicht mehr gesetzt ist? Idealerweise
rekursiv in allen Unterordnern des Hauptbackupordners.



Du kannst z.B. ein VB Script aufrufen, das das macht:
EXEC [master].[dbo].[xp_cmdshell] 'D:\Scripts\DeleteOldBackups.vbs',
no_output

Falls ja - hat jemandevtl. ein Codebeispiel?



Du möchtest wahrscheinlich nun auch noch den Inhalt des Scripts. Mombi, muss
es zuerst schreiben und kurz antesten. Hier ist es:


Dim fso
Dim fld
Dim fc
Dim f
Set fso = CreateObject("Scripting.FileSystemObject")
Set fld = fso.getFolder("D:\Backups")
Set fc = fld.files
For Each f in fc
If DateAdd("d", 28, f.DateLastModified) < Now() _
And (f.Attributes And 32) <> 32 Then
f.delete
End If
Next
Set fc = Nothing


Speichere obigen Code in eine neue, leere Text-Datei und àndere deren Namen
in DeleteOldBackups.vbs. Lege diese dann auf dem SQL Server in das
Verzeichnis D:\Scripts ab.

Dieses Script löscht alle Files im Verzeichnis "D:\Backups", die seit mehr
als 28 Tagen nicht mehr geàndert wurden.

Falls Du noch ein bisschen Infos zum FileSystemObject brauchst, hier der
Link:

http://msdn2.microsoft.com/en-us/li...y1a51.aspx

Du könntest auch einen Parameter übergeben, um die Anzahl Tage festzulegen.
Dazu musst Du den Aufruf àndern:
EXEC [master].[dbo].[xp_cmdshell] 'D:\Scripts\DeleteOldBackups.vbs 28',
no_output

und natürlich auch das Script

Option Explicit
Dim fso
Dim fld
Dim fc
Dim f
Set fso = CreateObject("Scripting.FileSystemObject")
Set fld = fso.getFolder("C:\Test")
Set fc = fld.files
For Each f in fc
If DateAdd("d", _
WScript.Arguments(0), _
f.DateLastModified) < Now() _
And (f.Attributes And 32) <> 32 Then
f.delete
End If
Next
Set fc = Nothing

HTH

Henry

Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com

Ähnliche fragen