Comment puis-je vérifier qu'un fichier SQLite db3 est valide / cohérent

24

J'ai des fichiers sqlite version3 db3 que j'ai copiés sur un système de production en cours d'exécution (je connais bad sysadmin bad sysadmin) pour diverses raisons. Existe-t-il une commande sqlite que je peux exécuter qui vérifiera que toutes les données peuvent être lues à partir de ces fichiers (cela ne me dérange pas si cela prend un certain temps).

J'envisageais de pirater un peu de perl qui vide toutes les données et les réimportait ensuite dans de nouveaux fichiers. Je pense que sqlite lèvera une exception s'il rencontre des données corrompues. Y a-t-il une meilleure façon?

Je suis CentOS 5.3 et sqlite-3.3.6-2

hellomynameisjoel
la source

Réponses:

34

Je pense que vous voulez essayer:

pragma integrity_check;

De la documentation :

Ce pragma effectue une vérification d'intégrité de l'ensemble de la base de données. Le pragma Integrity_check recherche les enregistrements en panne, les pages manquantes, les enregistrements mal formés, les entrées d'index manquantes et les erreurs de contrainte UNIQUE et NOT NULL. Si le pragma Integrity_check détecte des problèmes, des chaînes sont renvoyées (sous forme de plusieurs lignes avec une seule colonne par ligne) qui décrivent les problèmes. [...]

Voir aussi la commande PRAGMA quick_check qui effectue la plupart de la vérification de PRAGMA Integrity_check mais s'exécute beaucoup plus rapidement.

hernan43
la source
3
Voir aussi sqlite.org/faq.html#q21
Teddy