2 votes

J'essaie d'aspirer toutes les bases de données sous /data avec sqlite3, mais j'échoue avec l'erreur 14

Je voudrais vider tous mes fichiers de base de données sous /data, pour obtenir des performances un peu meilleures, j'ai donc exécuté le script suivant :

for i in $(find /data -iname "*.db"); do
#echo $(basename $i);
sqlite3 $i 'VACUUM;';
resVac=$?
if [ $resVac == 0 ]; then
    resVac="SUCCESS";
else
    resVac="ERRCODE-$resVac";
fi;

sqlite3 $i 'REINDEX;';
resIndex=$?
if [ $resIndex == 0 ]; then
    resIndex="SUCCESS";
else
    resIndex="ERRCODE-$resIndex";
fi;
echo "Database $i:  VACUUM=$resVac  REINDEX=$resIndex" | tee -a /data/vacuum.log
done

Comme vous pouvez le voir, ce script aspire et réindexe chaque fichier de base de données sous /data. REINDEX fonctionne bien, mais VACUUM ne fonctionne pas. Il renvoie "Error : unable to open database file". (code d'erreur 14)

J'ai affaire à /data. Donc, ça ne peut pas être un problème de montage.

2voto

Andy Brudtkuhl Points 1714

Contrairement à REINDEX le VACUUM doit créer un nouveau fichier temporaire pour y travailler. Elle remplace ensuite le fichier de la base de données par ce fichier temporaire. Cela signifie qu'elle a besoin d'un accès en écriture, non seulement au fichier de la base de données, mais aussi au répertoire dans lequel il se trouve.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X