======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