Access ist kein Server – also musst Du selbst vorsorgen
Access sichert nichts automatisch.
Kein Transaktionsprotokoll. Kein Point-in-Time-Recovery.
Wenn was kaputt ist, ist’s kaputt.
Deshalb baue ich meine Backup-Strategie von Anfang an ein.
Mein Ziel: tägliche Sicherung, automatische Kopien, einfacher Restore
Was ich immer mache:
- Beim Start Backup vom Backend anlegen
- Bei Bedarf manuelles Restore per Button
- Rollierende Backups mit Datumsstempel
- Optional ZIP-Archivierung
- Bei Absturz Wiederherstellung aus letzter Sicherung
Backup beim Start – leise und automatisch
Ich sichere nur das Backend (Tabellen).
Das Frontend ist ersetzbar.
Sub BackupBackend()
Dim quelle As String
Dim ziel As String
Dim fs As Object
Dim backupPfad As String
quelle = "\\server\access\backend.accdb"
backupPfad = CurrentProject.Path & "\Backups\"
ziel = backupPfad & "backend_" & Format(Now, "yyyymmdd_hhnnss") & ".accdb"
Set fs = CreateObject("Scripting.FileSystemObject")
If Dir(backupPfad, vbDirectory) = "" Then MkDir backupPfad
fs.CopyFile quelle, ziel, True
End Sub
Am besten rufe ich das aus dem AutoExec-Makro oder dem Startformular auf.
Restore per Button – für den Fall der Fälle
Ich zeige eine Liste aller Sicherungen an.
Per Doppelklick wird die gewählte Datei ins Original zurückkopiert.
Beispiel: Restore-Makro
Sub RestoreBackup(backupDatei As String)
Dim quelle As String
Dim ziel As String
Dim fs As Object
quelle = CurrentProject.Path & "\Backups\" & backupDatei
ziel = "\\server\access\backend.accdb"
Set fs = CreateObject("Scripting.FileSystemObject")
If MsgBox("Backup wiederherstellen?", vbYesNo + vbQuestion) = vbYes Then
fs.CopyFile quelle, ziel, True
MsgBox "Wiederhergestellt."
End If
End Sub
Optional: Komprimierte Backups
Wenn Du Platz sparen willst:
Sub BackupAlsZip()
' ZIP nur mit externer Komponente möglich, z. B. 7-Zip oder Shell.Application
' Beispiel mit Shell.Application:
Dim zipPath As String
Dim dbPath As String
Dim zipShell As Object
dbPath = "\\server\access\backend.accdb"
zipPath = CurrentProject.Path & "\Backups\backup_" & Format(Now, "yyyymmdd_hhnnss") & ".zip"
Set zipShell = CreateObject("Shell.Application")
Open zipPath For Output As #1: Close #1 ' leere ZIP-Datei anlegen
zipShell.NameSpace(zipPath).CopyHere dbPath
MsgBox "ZIP erstellt: " & zipPath
End Sub
Oder per 7-Zip-Kommandozeile:
Shell "C:\Tools\7z.exe a C:\Backups\backup.7z \\server\access\backend.accdb", vbHide
Versionierung: nur x Backups behalten
Nicht ewig alles behalten.
Ich lösche alte Sicherungen nach 30 Tagen.
Sub AlteBackupsLöschen()
Dim pfad As String
Dim f As Object, fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")
pfad = CurrentProject.Path & "\Backups\"
For Each f In fs.GetFolder(pfad).Files
If InStr(f.Name, "backend_") > 0 Then
If f.DateCreated < Date - 30 Then f.Delete
End If
Next
End Sub
Am besten beim Start mitlaufen lassen.
Tabelle zur Sicherungshistorie
Ich logge alle Backups in einer eigenen Tabelle:
Zeitpunkt | Dateiname | Größe MB | Kommentar |
---|---|---|---|
2025-04-25 06:30:01 | backend_20250425_063001.accdb | 23,4 | automatisch |
2025-04-24 06:30:00 | backend_20250424_063000.accdb | 23,2 | automatisch |
Einfach per VBA beim Sichern mitprotokollieren.
Wenn Access abstürzt: Letzte Sicherung verwenden
Wenn ich feststelle, dass die backend.accdb
defekt ist,
benenne ich die letzte funktionierende Sicherung wieder um.
Keine Magie. Einfach pragmatisch.
Mein Fazit
Access ist lokal. Also brauchst Du lokale Backups.
Ich sichere täglich, automatisch und nachvollziehbar.
Wenn was schiefgeht, will ich nicht diskutieren. Ich will wieder loslegen.
No responses yet