Wie kann ich überprüfen, ob eine SQLite-DB3-Datei gültig / konsistent ist?

24

Ich habe einige sqlite version3 db3-Dateien, die ich aus verschiedenen Gründen von einem laufenden Produktionssystem kopiert habe (ich kenne bad sysadmin bad sysadmin). Gibt es einen SQLite-Befehl, mit dem ich überprüfen kann, ob alle Daten aus diesen Dateien gelesen werden können (es macht mir nichts aus, wenn es eine Weile dauert).

Ich überlegte, etwas Perl zu hacken, das alle Daten ausgibt und sie dann in neue Dateien erneut importiert. Ich denke, SQLite wird eine Ausnahme auslösen, wenn es auf beschädigte Daten stößt. Gibt es einen besseren Weg?

Ich bin CentOS 5.3 und sqlite-3.3.6-2

hellomynameisjoel
quelle

Antworten:

34

Ich denke du willst versuchen:

pragma integrity_check;

Aus der Dokumentation :

Dieses Pragma führt eine Integritätsprüfung der gesamten Datenbank durch. Das Integritätsprüfungs-Pragma sucht nach nicht in der richtigen Reihenfolge befindlichen Datensätzen, fehlenden Seiten, fehlerhaften Datensätzen, fehlenden Indexeinträgen sowie nach EINZIGARTIGEN und NICHT NULL-Einschränkungsfehlern. Wenn das Integritätsprüfungs-Pragma Probleme findet, werden Zeichenfolgen (als mehrere Zeilen mit einer einzelnen Spalte pro Zeile) zurückgegeben, die die Probleme beschreiben. [...]

Siehe auch den Befehl PRAGMA quick_check, der den größten Teil der Prüfung von PRAGMA integrity_check ausführt, jedoch viel schneller ausgeführt wird.

hernan43
quelle
3
Siehe auch sqlite.org/faq.html#q21
Teddy