Page 1 sur 1

[Tuto] Réparer une base de donnée "malformed"

Publié : 16 juil. 2023, 12:04
par edward057
Hello tous le monde je viens de rencontrer un problème avec mon domoticz
Error: Error performing operation: 'database disk image is malformed'

Après de multiple recherche des solutions qui ne fonctionne pas sur ma base de donnée
j'ai trouver la solution https://support.storj.io/hc/en-us/artic ... malformed-

dans un premier temps arrêté domoticz

Code : Tout sélectionner

sudo systemctl stop domoticz.service
ensuite direction le répertoire de domoticz

Code : Tout sélectionner

cd domoticz/
on regarde quel est la taille de la base de donnée

Code : Tout sélectionner

ls -l -h domoticz.db
faire une copie de sauvegarde de la base de donnée

Code : Tout sélectionner

cp domoticz.db domoticz.db.bak
maintenant on vas crée un fichier d’exécution SQL pour sortir les données de la base

Code : Tout sélectionner

sqlite3 domoticz.db
.mode insert
.output dump_all.sql
.dump
.exit
une fois le fichier créé on va l'édité

Code : Tout sélectionner

cat dump_all.sql | grep -v TRANSACTION | grep -v ROLLBACK | grep -v COMMIT >dump_all_notrans.sql
on peut supprimer la base corrompue (mais etre bien sur d'avoir une copie de sauvegarde

Code : Tout sélectionner

sudo rm -f domoticz.db
maintenant on vas recréé la base complète cette étape peut prendre du temps 5, 10, voir 15 min ou plus en fonction de la taille de la base au départ

Code : Tout sélectionner

sqlite3 domoticz.db ".read dump_all_notrans.sql"
une fois tous ça fait on vérifie simplement que la BD ai une taille à peut prés similaire à la précédente (bien faire attention que celle-ci soit supérieur à 0)

Code : Tout sélectionner

ls -l -h domoticz.db
vous pouvez redémarrer domoticz

Code : Tout sélectionner

sudo systemctl start domoticz.service
En espérant que cela pourra en aidé quelque un qui on aussi ce genre de problème





pour tous exécuté en une fois

Code : Tout sélectionner

sudo systemctl stop domoticz.service
cd domoticz/
ls -l -h domoticz.db
cp domoticz.db domoticz.db.bak
sqlite3 domoticz.db
.mode insert
.output dump_all.sql
.dump
.exit
cat dump_all.sql | grep -v TRANSACTION | grep -v ROLLBACK | grep -v COMMIT >dump_all_notrans.sql
sudo rm -f domoticz.db
sqlite3 domoticz.db ".read dump_all_notrans.sql"
ls -l -h domoticz.db
sudo systemctl start domoticz.service

Modération

Publié : 16 juil. 2023, 15:28
par Keros
Merci pour ces explications.

Je viens de déplacer le sujet dans la section Tutos.