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:

ZeitpunktDateinameGröße MBKommentar
2025-04-25 06:30:01backend_20250425_063001.accdb23,4automatisch
2025-04-24 06:30:00backend_20250424_063000.accdb23,2automatisch

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.

Categories:

Tags:

No responses yet

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert