SQLite-Datenbank reparieren

Kategorie: LiveConfig
Erstellt: 17.05.2022

Dieser Artikel beschreibt was zu tun ist, wenn Sie die Fehlermeldung Database exception: database disk image is malformed in der LiveConfig-Log-Datei (/var/log/liveconfig/liveconfig.log) vorfinden.

Gründe für kaputte Datenbanken

Es gibt zahlreiche Gründe für kaputte Datenbankdateien, SQLite stellt hierzu sogar einen eigenen Artikel bereit. Was LiveConfig betrifft, sind die häufigsten Ursachen

  • kein freier Speicherplatz mehr verfügbar beim Schreiben in die Datenbank
  • Wiederherstellung einer “Hot Copy” aus einem Backup (nicht mit lcdbbackup erstellt, sondern nur die Datenbank-Datei kopiert)
  • Löschen oder falsche Wiederherstellung der Datenbank-Journal-Datei (liveconfig.db-journal)

Um richtig und sicher ein Backup der LiveConfig-Datenbank (mit SQLite) zu erzeugen, müssen Sie das Programm /usr/lib/liveconfig/lcdbbackup ausführen (das wird zusammen mit LiveConfig installiert, siehe dessen Man-Page für weitere Details).

Reparatur der Datenbank

  1. Beenden Sie LiveConfig, so dass auf die Datenbank nicht mehr zugegriffen wird:

    root@srv:~# systemctl stop liveconfig
    
  2. Erstellen Sie eine Sicherheitskopie der Datenbankdateien:

    root@srv:~# cp -av /var/lib/liveconfig/liveconfig.db /var/lib/liveconfig/liveconfig.db.BACKUP
    
  3. Öffnen Sie die Datenbank mit SQLite (ggf. müssen Sie vorher noch das Paket sqlite3 installieren)

    root@srv:~# sqlite3 /var/lib/liveconfig/liveconfig.db
    SQLite version 3.27.2 2019-02-25 16:06:06
    Enter ".help" for usage hints.
    sqlite>
    
  4. Führen Sie nun den SQL-Befehl PRAGMA integrity_check; aus.

    Wenn alles in Ordnung ist, liefert dieser einfach nur ok zurück. Sie können SQLite dann mit dem Befehl .quit beenden.

  5. Wenn die Integritätsprüfung aus Schritt 4 irgendeinen Fehler zurückgeliefert hat, erstellen Sie einen SQL-Dump mittels der folgenden Befehle:

    sqlite> .output /var/lib/liveconfig/liveconfig.db.sql
    sqlite> .dump
    sqlite> .quit
    

    Benennen Sie dann die kaputten Datenbankdateien um und importieren den SQL-Dump:

    root@srv:~# mv /var/lib/liveconfig/liveconfig.db /var/lib/liveconfig/liveconfig.db.corrupt
    root@srv:~# mv /var/lib/liveconfig/liveconfig.db-journal /var/lib/liveconfig/liveconfig.db-journal.corrupt
    root@srv:~# sqlite3 /var/lib/liveconfig/liveconfig.db </var/lib/liveconfig/liveconfig.db.sql
    root@srv:~# chown liveconfig:liveconfig /var/lib/liveconfig/liveconfig.db*
    root@srv:~# chmod 600 /var/lib/liveconfig/liveconfig.db*
    

Damit sollte das Problem behoben sein. Starten Sie LiveConfig und prüfen ob nun alles wieder in Ordnung ist.

root@srv:~# systemctl start liveconfig