======Info====== Script voor het comprimeren van SQL database bak dump bestanden. \\ Bedoeld voor in dagelijkse scheduled task. 7za.exe moet in de directory staan die genoemd wordt onder toolsdir. \\ Het bak bestand van de database moet in de directory staan die genoemd wordt onder backupdir in de vorm databasenaam.bak. \\ Het resultaat van het hernoemen en comprimeren wordt gelogd in het logbestand dat gedefinieerd wordt onder backuplogfile. \\ ======Versie 4===== 'SQL backup script. Comprimeert alle .bak bestanden naar bakbestand.7z/.zip en houd een opgegeven 'aantal oudere exemplaren beschikbaar. '20071210, v1. '20080312, v2: 'Compressie is nu function. '20081003, v3: 'Comprimeert alle .bak bestanden in backupdir met datum van vandaag. Werkt ook op za/zo. '20100511, v4: 'Compressie type zo aangepast dat er een keuze bestaat tussen 7zip en zip voor alle databases. 'objShell.Run commando's zo aangepast dat ze om kunnen gaan met spaties in str7zipExe en databasepaden/namen. 'Minteken gezet tussen dbnaam en volgnummer bestand na inpakken om zodoende de nummers beter te kunnen zien 'als de naam van de DB al eindigd op een nummer. On Error Resume Next 'Defineer compressietype. 'Geldige waardes: "7z" of "zip" CONST CompressionType = "7z" 'Definieer de directory met al de .bak bestanden. 'Vergeet de laatste backslash niet! CONST strBackupDir = "D:\Backup\" 'Definieer het volledige pad naar 7za.exe. CONST str7zipExe = "D:\Tools\7-zip\7za.exe" 'Definieer overige constanten CONST ForReading = 1 CONST ForWriting = 2 CONST ForAppending = 8 CONST Create = True CONST HideWindow = 0 CONST WaitOnReturn = True Const NumberOfBackupsToKeep = 7 Set objFso = CreateObject("Scripting.FileSystemObject") Set WorkFolder = objFso.GetFolder(strBackupDir) 'Bekijk voor elk .bak bestand in strBackupDir of dit bestand de datum van vandaag heeft. 'Zo ja, pak dit bestand dan in. For Each file in WorkFolder.Files If objFso.GetExtensionName(file) = "bak" Then Set bakFile = objFso.GetFile(strBackupDir & "\" & file.Name) If formatDate(bakFile.DateLastModified) = formatDate(Now) Then SQLCompress(Left(file.name,len(file.name)-4)) End If End If Next 'Functies Function formatDate(strDate) strDay = datepart("d", strDate) if len(strDay) = 1 then strDay = "0" & strDay end if strMonth = datepart("m", strDate) if len(strMonth) = 1 then strMonth = "0" & strMonth end if strYear = datepart("yyyy", strDate) formatDate = strYear & strMonth & strDay End Function Function SQLCompress(strDBName) backuplogfile = strBackupDir & strDBName & ".log" Set objShell = CreateObject("WScript.Shell") 'Open het logbestand voor append, creëer indien niet bestaand Set backuplogtxt = objFso.OpenTextFile(backuplogfile, ForAppending, Create) backuplogtxt.WriteLine("======================================================================================") backuplogtxt.WriteLine("#############################################") backuplogtxt.WriteLine("# " & strDBName & " BACKUP #") backuplogtxt.WriteLine("#############################################") backuplogtxt.WriteLine("======================================================================================") backuplogtxt.WriteLine(Date) backuplogtxt.WriteLine(Time) backuplogtxt.WriteLine("======================================================================================") backuplogtxt.WriteLine("********** VERWIJDEREN OUDSTE BACKUP **********") backuplogtxt.WriteLine("OUDSTE BACKUP WORDT GEWIST !") 'Als strDBName-X.7z met nummer gelijk aan NumberOfBackupsToKeep bestaat, verwijder deze If objFso.FileExists(strBackupDir & strDBName & "-" & NumberOfBackupsToKeep & ".7z") Then objFso.DeleteFile(strBackupDir & strDBName & "-" & NumberOfBackupsToKeep & ".7z") End If 'OUD: Als strDBNameX.7z met nummer gelijk aan NumberOfBackupsToKeep bestaat, verwijder deze If objFso.FileExists(strBackupDir & strDBName & NumberOfBackupsToKeep & ".7z") Then objFso.DeleteFile(strBackupDir & strDBName & NumberOfBackupsToKeep & ".7z") End If 'Als strDBName-X.zip met nummer gelijk aan NumberOfBackupsToKeep bestaat, verwijder deze If objFso.FileExists(strBackupDir & strDBName & "-" & NumberOfBackupsToKeep & ".zip") Then objFso.DeleteFile(strBackupDir & strDBName & "-" & NumberOfBackupsToKeep & ".zip") End If backuplogtxt.WriteLine("BACKUPS SCHUIVEN EEN PLAATSJE OP") 'Hernoem elke strDBNameX.7z/.zip naar strDBName(X+1).7z/.zip For i = -(NumberOfBackupsToKeep - 1) to -1 If objFso.FileExists(strBackupDir & strDBName & -i & ".7z") Then objFso.MoveFile strBackupDir & strDBName & -i & ".7z", strBackupDir & strDBName & "-" & (-i+1) & ".7z" backuplogtxt.WriteLine(strDBName & -i & ".7z hernoemd naar " & strDBName & "-" & (-i+1) & ".7z") End If If objFso.FileExists(strBackupDir & strDBName & "-" & -i & ".7z") Then objFso.MoveFile strBackupDir & strDBName & "-" & -i & ".7z", strBackupDir & strDBName & "-" & (-i+1) & ".7z" backuplogtxt.WriteLine(strDBName & "-" & -i & ".7z hernoemd naar " & strDBName & "-" & (-i+1) & ".7z") End If If objFso.FileExists(strBackupDir & strDBName & "-" & -i & ".zip") Or objFso.FileExists(strBackupDir & strDBName & -i & ".zip") Then objFso.MoveFile strBackupDir & strDBName & "-" & -i & ".zip", strBackupDir & strDBName & "-" & (-i+1) & ".zip" backuplogtxt.WriteLine(strDBName & "-" & -i & ".zip hernoemd naar " & strDBName & "-" & (-i+1) & ".zip") End If Next backuplogtxt.WriteLine("======================================================================================") 'Voer 7za.exe uit via cmd.exe met de benodigde parameters If objFso.FileExists(strBackupDir & strDBName & ".bak") Then Select Case CompressionType Case "7z" 'Sluit het logbestand en wacht 5 seconden, zodat het run commando een redirect van de output kan doen naar dit bestand backuplogtxt.Close() WScript.Sleep(5000) 'Comprimeer het bak bestand met 7za.exe, PPMd methode met maximale compressie en dump de uitvoer van de hidden console naar het logbestand. objShell.Run "CMD /C " & chr(34) & chr(34) & str7zipExe & chr(34) & " a -t7z " & chr(34) & strBackupDir & strDBName & "-1.7z" & chr(34) & " " & chr(34) & strBackupDir & strDBName & ".bak" & chr(34) & " -m0=PPMd -mx=9" & chr(34) & " >> " & backuplogfile, HideWindow ,WaitOnReturn 'Onderstaande regel is hetzelfde als bovenstaande, maar comprimeert met LZMA. 'Deze vorm van compressie is beter maar heeft ook meer geheugen nodig om de compressie uit te voeren. 'Als de machine voldoende geheugen (en tijd) heeft om het bak bestand te comprimeren, gebruik dan onderstaande regel ipv bovenstaande. 'objShell.Run "CMD /C " & chr(34) & chr(34) & str7zipExe & chr(34) & " a -t7z " & chr(34) & strBackupDir & strDBName & "-1.7z" & chr(34) & " " & chr(34) & strBackupDir & strDBName & ".bak" & chr(34) & " -m0=LZMA -mx=9" & chr(34) & " >> " & backuplogfile, HideWindow ,WaitOnReturn Case "zip" 'Sluit het logbestand en wacht 5 seconden, zodat het run commando een redirect van de output kan doen naar dit bestand backuplogtxt.Close() WScript.Sleep(5000) 'Pak in naar .zip met fastest compressie. objShell.Run "CMD /C " & chr(34) & chr(34) & str7zipExe & chr(34) & " a -tzip " & chr(34) & strBackupDir & strDBName & "-1.zip" & chr(34) & " " & chr(34) & strBackupDir & strDBName & ".bak" & chr(34) & " -mx=1" & chr(34) & " >> " & backuplogfile, HideWindow ,WaitOnReturn Case Else backuplogtxt.WriteLine("CompressionType is niet (juist) gespecificeerd. Open het script en geef aan 7z of zip als CompressionType.") backuplogtxt.Close() WScript.Sleep(5000) End Select End If 'Open het logbestand nogmaals Set backuplogtxt = objFso.OpenTextFile(backuplogfile, ForAppending) backuplogtxt.WriteLine("BACKUP IS VOLTOOID") backuplogtxt.WriteLine(Date) backuplogtxt.WriteLine(Time) 'Sluit het logbestand backuplogtxt.Close() Set objShell = Nothing End Function Set objFso = Nothing ======Versie 3====== Comprimeert alle .bak bestanden in backupdir en bevat de mogelijkheid om op te geven hoeveel backups achtergehouden moeten worden. 'SQL backup script. Comprimeert alle .bak bestanden naar bakbestand.7z en houd een opgegeven aantal oudere exemplaren beschikbaar. '20071210 v1. '20080312 v2, compressie is nu function. '20081003 v3, comprimeert alle .bak bestanden in backupdir met datum van vandaag. Werkt ook op za/zo. On Error Resume Next 'Definieer constanten CONST backupdir = "D:\Backup\" CONST toolsdir = "D:\Tools\7-zip\" CONST ForReading = 1 CONST ForWriting = 2 CONST ForAppending = 8 CONST Create = True CONST HideWindow = 0 CONST WaitOnReturn = True Const NumberOfBackupsToKeep = 7 Set objFso = CreateObject("Scripting.FileSystemObject") Set WorkFolder = objFso.GetFolder(backupdir) 'Bekijk voor elk .bak bestand in backupdir of dit bestand de datum van vandaag heeft. 'Zo ja, pak dit bestand dan in. For Each file in WorkFolder.Files If objFso.GetExtensionName(file) = "bak" Then Set bakFile = objFso.GetFile(backupdir & "\" & file.Name) If formatDate(bakFile.DateLastModified) = formatDate(Now) Then SQLCompress(Left(file.name,len(file.name)-4)) End If End If Next 'Functies Function formatDate(strDate) strDay = datepart("d", strDate) if len(strDay) = 1 then strDay = "0" & strDay end if strMonth = datepart("m", strDate) if len(strMonth) = 1 then strMonth = "0" & strMonth end if strYear = datepart("yyyy", strDate) formatDate = strYear & strMonth & strDay End Function Function SQLCompress(dbnaam) backuplogfile = backupdir & dbnaam & ".log" Set objShell = CreateObject("WScript.Shell") 'Open het logbestand voor append, creëer indien niet bestaand Set backuplogtxt = objFso.OpenTextFile(backuplogfile, ForAppending, Create) backuplogtxt.WriteLine("======================================================================================") backuplogtxt.WriteLine("#############################################") backuplogtxt.WriteLine("# " & dbnaam & " BACKUP #") backuplogtxt.WriteLine("#############################################") backuplogtxt.WriteLine("======================================================================================") backuplogtxt.WriteLine(Date) backuplogtxt.WriteLine(Time) backuplogtxt.WriteLine("======================================================================================") backuplogtxt.WriteLine("********** VERWIJDEREN OUDSTE BACKUP **********") backuplogtxt.WriteLine("OUDSTE BACKUP WORDT GEWIST !") 'Als dbnaam#.7z met nummer gelijk aan NumberOfBackupsToKeep bestaat, hernoem hem dan If objFso.FileExists(backupdir & dbnaam & NumberOfBackupsToKeep & ".7z") Then objFso.DeleteFile(backupdir & dbnaam & NumberOfBackupsToKeep & ".7z") End If backuplogtxt.WriteLine("BACKUPS SCHUIVEN EEN PLAATSJE OP") ' Hernoem elke dbnaamX.7z naar dbnaam(X+1).7z For i = -(NumberOfBackupsToKeep - 1) to -1 If objFso.FileExists(backupdir & dbnaam & -i & ".7z") Then objFso.MoveFile backupdir & dbnaam & -i & ".7z", backupdir & dbnaam & (-i+1) & ".7z" backuplogtxt.WriteLine(dbnaam & -i & ".7z hernoemd naar " & dbnaam & (-i+1) & ".7z") End If Next backuplogtxt.WriteLine("======================================================================================") 'Sluit het logbestand en wacht 5 seconden, zodat het run commando een redirect van de output kan doen naar dit bestand backuplogtxt.Close() WScript.Sleep(5000) 'Voer 7za.exe uit via cmd.exe met de benodigde parameters If objFso.FileExists(backupdir & dbnaam & ".bak") Then 'Comprimeer het bak bestand met 7za.exe, PPMd methode met maximale compressie en dump de uitvoer van de hidden console naar het logbestand. objShell.Run "CMD /C " & chr(34) & toolsdir & "7za.exe a -t7z " & backupdir & dbnaam & "1.7z " & backupdir & dbnaam & ".bak -m0=PPMd -mx=9" & chr(34) & " >> " & backuplogfile, HideWindow ,WaitOnReturn 'Onderstaande regel is hetzelfde als bovenstaande, maar comprimeert met LZMA. 'Deze vorm van compressie is beter maar heeft ook meer geheugen nodig om de compressie uit te voeren. 'Als de machine voldoende geheugen (en tijd) heeft om het bak bestand te comprimeren, gebruik dan onderstaande regel ipv bovenstaande. 'objShell.Run "CMD /C " & chr(34) & toolsdir & "7za.exe a -t7z " & backupdir & dbnaam & "1.7z " & backupdir & dbnaam & ".bak -m0=LZMA -mx=9" & chr(34) & " >> " & backuplogfile, HideWindow ,WaitOnReturn End If 'Open het logbestand nogmaals Set backuplogtxt = objFso.OpenTextFile(backuplogfile, ForAppending) backuplogtxt.WriteLine("BACKUP IS VOLTOOID") backuplogtxt.WriteLine(Date) backuplogtxt.WriteLine(Time) 'Sluit het logbestand backuplogtxt.Close() Set objShell = Nothing End Function Set objFso = Nothing ======Versie 2====== Compressie word nu geregeld via function die x keer aangeroepen kan worden. 'SQL backup script. Comprimeert de dbnaam.bak naar dbnaam.7z en houd 5 oudere exemplaren beschikbaar. '20071210 v1 '20080312 v2, compressie is nu function. on error resume next 'Definieer constanten SQLCompress("databasenaam") SQLCompress("master") SQLCompress("model") SQLCompress("msdb") CONST backupdir = "D:\Backup\" CONST toolsdir = "D:\Tools\7-zip\" CONST ForReading = 1 CONST ForWriting = 2 CONST ForAppending = 8 CONST Create = true CONST HideWindow = 0 CONST WaitOnReturn = true 'Constanten voor dag van de week check CONST Friday = 6 CONST saturday = 7 CONST sunday = 1 'checken of het weekend is Function SQLCompress(dbnaam) If Not weekday(now()) = sunday and not weekday(now()) = saturday Then backuplogfile = backupdir & dbnaam & ".log" Set objFso = CreateObject("Scripting.FileSystemObject") Set objShell = CreateObject("WScript.Shell") 'Open het logbestand voor append, creëer indien niet bestaand Set backuplogtxt = objFso.OpenTextFile(backuplogfile, ForAppending, Create) backuplogtxt.WriteLine("======================================================================================") backuplogtxt.WriteLine("#############################################") backuplogtxt.WriteLine("# " & dbnaam & " BACKUP #") backuplogtxt.WriteLine("#############################################") backuplogtxt.WriteLine("======================================================================================") backuplogtxt.WriteLine(Date) backuplogtxt.WriteLine(Time) backuplogtxt.WriteLine("======================================================================================") backuplogtxt.WriteLine("********** VERWIJDEREN OUDSTE BACKUP **********") backuplogtxt.WriteLine("OUDSTE BACKUP WORDT GEWIST !") 'Als dbnaam5.7z bestaat, hernoem hem dan If objFso.FileExists(backupdir & dbnaam & "5.7z") Then objFso.DeleteFile(backupdir & dbnaam & "5.7z") End If backuplogtxt.WriteLine("BACKUPS SCHUIVEN EEN PLAATSJE OP") ' Hernoem elke dbnaamX.7z naar dbnaam(X+1).7z For i = -4 to -1 If objFso.FileExists(backupdir & dbnaam & -i & ".7z") Then objFso.MoveFile backupdir & dbnaam & -i & ".7z", backupdir & dbnaam & (-i+1) & ".7z" backuplogtxt.WriteLine(dbnaam & -i & ".7z hernoemd naar " & dbnaam & (-i+1) & ".7z") End If Next If objFso.FileExists(backupdir & dbnaam & ".7z") Then objFso.MoveFile backupdir & dbnaam & ".7z", backupdir & dbnaam & "1.7z" backuplogtxt.WriteLine(dbnaam & ".7z hernoemd naar " & dbnaam & "1.7z") End If backuplogtxt.WriteLine("======================================================================================") 'Sluit het logbestand en wacht 5 seconden, zodat het run commando een redirect van de output kan doen naar dit bestand backuplogtxt.Close() WScript.Sleep(5000) 'Voer 7za.exe uit via cmd.exe met de benodigde parameters If objFso.FileExists(backupdir & dbnaam & ".bak") Then 'Comprimeer het bak bestand met 7za.exe, PPMd methode met maximale compressie en dump de uitvoer van de hidden console naar het logbestand. objShell.Run "CMD /C " & chr(34) & toolsdir & "7za.exe a -t7z " & backupdir & dbnaam & ".7z " & backupdir & dbnaam & ".bak -m0=PPMd -mx=9" & chr(34) & " >> " & backuplogfile, HideWindow ,WaitOnReturn 'Onderstaande regel is hetzelfde als bovenstaande, maar comprimeert met LZMA. 'Deze vorm van compressie is beter maar heeft ook meer geheugen nodig om de compressie uit te voeren. 'Als de machine voldoende geheugen (en tijd) heeft om het bak bestand te comprimeren, gebruik dan onderstaande regel ipv bovenstaande. 'objShell.Run "CMD /C " & chr(34) & toolsdir & "7za.exe a -t7z " & backupdir & dbnaam & ".7z " & backupdir & dbnaam & ".bak -m0=LZMA -mx=9" & chr(34) & " >> " & backuplogfile, HideWindow ,WaitOnReturn End If 'Open het logbestand nogmaals Set backuplogtxt = objFso.OpenTextFile(backuplogfile, ForAppending) backuplogtxt.WriteLine("BACKUP IS VOLTOOID") backuplogtxt.WriteLine(Date) backuplogtxt.WriteLine(Time) 'Sluit het logbestand backuplogtxt.Close() Set objShell = Nothing Set objFso = Nothing End If End Function ======Versie 1====== In deze versie word op zaterdag en zondag geen backup gemaakt. \\ 'SQL backup script. Comprimeert de dbnaam.bak naar dbnaam.7z en houd 5 oudere exemplaren beschikbaar. 'Dit script moet in D:\Scripts geplaatst worden. In D:\Tools moet 7za.exe staan. on error resume next 'Definieer constanten 'Om welke databse gaat het? CONST dbnaam = "naamvandedatabase" CONST backupdir = "D:\Backup\" CONST toolsdir = "D:\Tools\" backuplogfile = "D:\Tools\backup-" & dbnaam & ".log" CONST ForReading = 1 CONST ForWriting = 2 CONST ForAppending = 8 CONST Create = true CONST HideWindow = 0 CONST WaitOnReturn = true 'Constanten voor dag van de week check CONST Friday = 6 CONST saturday = 7 CONST sunday = 1 'checken of het weekend is If Not weekday(now()) = sunday and not weekday(now()) = saturday Then Set objFso = CreateObject("Scripting.FileSystemObject") Set objShell = CreateObject("WScript.Shell") 'Open het logbestand voor append, creëer indien niet bestaand Set backuplogtxt = objFso.OpenTextFile(backuplogfile, ForAppending, Create) backuplogtxt.WriteLine("======================================================================================") backuplogtxt.WriteLine("#############################################") backuplogtxt.WriteLine("# " & dbnaam & " BACKUP #") backuplogtxt.WriteLine("#############################################") backuplogtxt.WriteLine("======================================================================================") backuplogtxt.WriteLine(Date) backuplogtxt.WriteLine(Time) backuplogtxt.WriteLine("======================================================================================") backuplogtxt.WriteLine("********** VERWIJDEREN OUDSTE BACKUP **********") backuplogtxt.WriteLine("OUDSTE BACKUP WORDT GEWIST !") 'Als dbnaam5.7z bestaat, hernoem hem dan If objFso.FileExists(backupdir & dbnaam & "5.7z") Then objFso.DeleteFile(backupdir & dbnaam & "5.7z") End If backuplogtxt.WriteLine("BACKUPS SCHUIVEN EEN PLAATSJE OP") ' Hernoem elke dbnaamX.7z naar dbnaam(X+1).7z For i = -4 to -1 If objFso.FileExists(backupdir & dbnaam & -i & ".7z") Then objFso.MoveFile backupdir & dbnaam & -i & ".7z", backupdir & dbnaam & (-i+1) & ".7z" backuplogtxt.WriteLine(dbnaam & -i & ".7z hernoemd naar " & dbnaam & (-i+1) & ".7z") End If Next If objFso.FileExists(backupdir & dbnaam & ".7z") Then objFso.MoveFile backupdir & dbnaam & ".7z", backupdir & dbnaam & "1.7z" backuplogtxt.WriteLine(dbnaam & ".7z hernoemd naar " & dbnaam & "1.7z") End If backuplogtxt.WriteLine("======================================================================================") 'Sluit het logbestand en wacht 5 seconden, zodat het run commando een redirect van de output kan doen naar dit bestand backuplogtxt.Close() WScript.Sleep(5000) 'Voer 7za.exe uit via cmd.exe met de benodigde parameters If objFso.FileExists(backupdir & dbnaam & ".bak") Then objShell.Run "CMD /C " & chr(34) & toolsdir & "7za.exe a -t7z " & backupdir & dbnaam & ".7z " & backupdir & dbnaam & ".bak -m0=LZMA -mx=9" & chr(34) & " >> " & backuplogfile, HideWindow ,WaitOnReturn End If 'Open het logbestand nogmaals Set backuplogtxt = objFso.OpenTextFile(backuplogfile, ForAppending) backuplogtxt.WriteLine("BACKUP IS VOLTOOID") backuplogtxt.WriteLine(Date) backuplogtxt.WriteLine(Time) 'Sluit het logbestand backuplogtxt.Close() Set objShell = Nothing Set objFso = Nothing End If