svn cleanup: sqlite: l'image disque de la base de données est mal formée


93

J'essayais de faire un svn cleanupparce que je ne peux pas valider les modifications dans ma copie de travail, et j'ai eu l'erreur suivante:

sqllite: l'image disque de la base de données est mal formée

Le nettoyage n'a pas réussi à traiter les chemins suivants

Que puis-je faire maintenant?

Réponses:


98

J'ai eu le même problème. Le billet de blog suivant m'a aidé à le résoudre: http://www.polak.ro/svn-e200030-sqlite-database-disk-image-is-malformed.html

Vous effectuez un contrôle d'intégrité sur la base de données sqlite qui assure le suivi du référentiel (/.svn/wc.db):

sqlite3 .svn/wc.db "pragma integrity_check"

Cela devrait signaler quelques erreurs.

Ensuite, vous pourrez peut-être les nettoyer en faisant:

sqlite3 .svn/wc.db "reindex nodes"
sqlite3 .svn/wc.db "reindex pristine"

S'il y a toujours des erreurs après cela, vous avez toujours la possibilité d'extraire une nouvelle copie du référentiel dans un dossier temporaire et de copier le dossier .svn de la nouvelle copie vers l'ancienne. Ensuite, l'ancienne copie devrait fonctionner à nouveau et vous pouvez supprimer le dossier temporaire.


6
cela a en fait résolu mon problème. Merci beaucoup.
Erdogan Kurtur

17
Que faites-vous si vous obtenez toujours Erreur: l'image disque de la base de données est mal formée?
Je vais

3
@jwill J'ai également eu une erreur après la mise en œuvre de la solution donnée ci-dessus ... Mais ce que j'ai essayé, c'est simplement de récupérer une nouvelle copie de votre référentiel, puis d'écraser le dossier .svn de la nouvelle copie d'extraction par l'ancien..J'ai résolu mon problème comme ça ...
Rushabh Shah

6
Bizarre, je reçoisError: unable to identify the object to be reindexed
Pacerier

4
Le lien polak.ro/... semble être définitivement arrêté.
MadMike

21

Vérification de l'intégrité

sqlite3 .svn/wc.db "pragma integrity_check"

Nettoyer

sqlite3 .svn/wc.db "reindex nodes"
sqlite3 .svn/wc.db "reindex pristine"

Alternativement

Vous pourrez peut-être vider le contenu de la base de données qui peut être lu dans un fichier de sauvegarde, puis le réinsérer dans un nouveau fichier de base de données:

sqlite3 .svn/wc.db

sqlite> .mode insert
sqlite> .output dump_all.sql
sqlite> .dump
sqlite> .exit

mv .svn/wc.db .svn/wc-corrupt.db
sqlite3 .svn/wc.db

sqlite> .read dump_all.sql
sqlite> .exit

2
Cela a aidé avec une erreur que j'avais avec différents logiciels, alors merci monsieur!
Azirius

Pour moi, la commande "réindexer les nœuds" a échoué, mais une solution alternative (recréer la base de données à partir du vidage) m'a aidé! Merci.
EvAlex

1
Je n'ai pas tout mis au rebut, mais c'était suffisant. Faites défiler le fichier sql et remplacez le fichier final ROLLBACK;par COMMIT;avant le fichier .read dump_all.sql.
Jan Katins

2
Cette approche semble maintenant échouer avec l'erreur svn: E235000: In file 'D:\Development\SVN\Releases\TortoiseSVN-1.9.7\ext\subversion\subversion\libsvn_wc\wc_db_wcroot.c' line 311: assertion failed (format >= 1), mais il existe une solution de contournement ici: hanscarpenter.blogspot.com.au/2016/05/…
mpeac

Le correctif approprié pour l'erreur d'assertion est: 1. exécutez sqlite3 .svn/wc.db 'PRAGMA user_version;'sur la base de données d'origine pour obtenir le nombre correct. 2. exécutez sqlite3 .svn/wc.db 'PRAGMA user_version = XXX;'sur la version restaurée avec le numéro correct.
Chronial du

19

Le nettoyage SVN n'a pas fonctionné. Le dossier SVN sur mon système local a été corrompu. Je viens donc de supprimer le dossier, d'en recréer un nouveau et de le mettre à jour à partir de SVN. Cela a résolu le problème!


1
C'est de loin la solution la plus simple. Obtenez une nouvelle copie de travail et travaillez avec cette URL: svn co.
Jahmic

16

Après une panne de courant, je suis tombé sur l' image disque de la base de données est une erreur malformée et la commande suggérée de reindex nodes n'a pas résolu tous les problèmes en raison de contraintes violées. La procédure décrite dans http://mail-archives.apache.org/mod_mbox/subversion-users/201111.mbox/%3C874nybhpxi.fsf@stat.home.lan%3E n'a pas non plus résolu le problème.

Solution dans mon cas:

  • Extraire à nouveau le référentiel svn dans un dossier temporaire
  • Copiez, c'est-à-dire remplacez, le fichier ".svn / wc.db" de la nouvelle extraction vers celui corrompu

Cela peut être utile si votre extraction svn d'origine contient de nombreux fichiers modifiés ou non versionnés et que vous ne voulez pas passer à une nouvelle extraction svn.


13

J'ai copié le dossier .svn du répertoire de mon collègue et cela a résolu le problème.


Ici, nous pouvons également vérifier la nouvelle copie de travail dans le même système uniquement, puis remplacer l'ancien dossier .svn par un nouveau dossier .svn et de cette façon, nous pouvons également résoudre ce problème ...
Rushabh Shah

3
  1. Découvrez ce svn à un autre endroit
  2. afficher le fichier .svn caché
  3. remplacer le fichier wc

cela fonctionne pour moi!


2

Peut-être, pourrait être une solution:

  1. clic droit sur le projet
  2. équipe -> déconnecter
  3. Sélectionnez: Supprimer également ...

Maintenant, reconnectez-vous:

  1. clic droit sur le projet
  2. équipe -> Partager le projet
  3. sélectionnez votre repositorie: mine SVN(autre cas: git, etc)
  4. sélectionnez votre repositoriedossier

Remarque:

Sur mon cas, j'ai fait une sauvegarde de mes fichiers. (retour en toute sécurité: P)

Éditer:

Je parle de SVNplugin sur Eclipse:)


1

Avez-vous vu ce message sur le site de subversion? Vous pouvez également essayer de valider et de «réparer» la base de données directement comme décrit ici . (Notez que je ne suis pas un expert, j'ai juste fait une recherche rapide sur Google. Peut-être pas du tout lié à vos problèmes).

Personnellement, j'essaierais de vérifier à nouveau le repo et de réappliquer vos modifications. Vous ne savez pas si cela est possible dans votre cas?


Merci, laissez-moi voir votre suggestion.
Rubens Mariuzzo

vérifier à nouveau est ce que j'ai fini par faire, certainement la solution la plus simple (en fonction des changements pour réappliquer ^^)
elgui

Dans mon cas, cela n'a pas résolu le problème, a également causé beaucoup plus d'erreurs dans Tortoise SVN, prévenez juste.
komorra du

1

Au fil de mes recherches, j'ai trouvé 2 solutions viables.

  1. Si vous utilisez n'importe quel type de connexion, ssh, samba, montage, déconnexion / démontage et reconnexion / remontage. Essayez à nouveau, cela a souvent résolu le problème pour moi. Après cela, vous pouvez effectuer svn cleanup ou continuer à travailler normalement (selon le moment où le problème est apparu). Le redémarrage de mon ordinateur a également résolu le problème une fois ... oui c'est idiot je sais!

  2. Parfois, tout ce qu'il y a à faire est de rm -rf vos fichiers (ou si vous n'êtes pas familier avec le terme, supprimez simplement votre dossier svn), et revérifiez votre dépôt svn une fois de plus. Veuillez noter que cela ne résout pas toujours le problème et que vous pouvez également avoir des modifications que vous ne voulez pas perdre. C'est pourquoi je l'utilise comme deuxième option.

J'espère que cela vous aide les gars!


1

J'ai résolu mon problème de corruption du serveur visuel svn rep-cache.db.

Il existe deux solutions.

Arrêtez le service Visual SVN Server.

Téléchargez le shell sqllite3.exe à partir du site Web sqllite et copiez-le dans le dossier db du dépôt.

Tapez les commandes suivantes à l'invite de commandes dans le dossier db du dépôt.

- Première solution -

sqlite3 rep-cache.db

.clone rep-cache-new.db

appuyez sur ctrl + c pour quitter sqllite.

ren rep-cache.db rep-cache-old.db

ren re-cache-new.db rep-cache.db

- 2e solution -

Supprimer le rep-cache.db

del rep-cache.db

il sera automatiquement créé.


Merci Muhammad - juste l'indice dont j'avais besoin! Il faut déterminer si le problème est lié aux bases de données sqlite de votre copie de travail ou de celle du serveur. Essayez votre validation sur la ligne de commande - si le fichier est transféré avec succès et que l'erreur se produit lors de la «validation de la transaction», le problème est probablement du côté du serveur. La résolution de Muhammad ici fonctionne comme un charme. Cette ancienne archive listserve a plus de détails: svn.haxx.se/users/archive-2010-12/0257.shtml
Powderflask

1

J'ai corrigé cela pour une instance de cela m'arrivant en supprimant le dossier .svn caché, puis en effectuant une extraction du dossier vers la même URL.

Cela n'a écrasé aucun de mes fichiers modifiés et a simplement versionné tous les fichiers existants au lieu de récupérer de nouvelles copies du serveur.


1

Ne perdez pas votre temps sur checking integrityou supprimez des données de la work queuetable car ce sont des solutions temporaires et cela vous reviendra après un certain temps.

Faites-en un autre checkoutet remplacez le dossier .svn existant par le nouveau. Faites un updateet puis ça devrait aller sans heurts.


0

Si vous installez Tortoise SVN, veuillez aller dans le gestionnaire de tâches et l'arrêter. Essayez ensuite de supprimer le dossier. ça va marcher


0

La réponse marquée pourrait être la bonne, selon le nettoyage de subversion. Mais l'erreur est certainement générique, ce qui m'a conduit ici, cette page de questions.

Notre projet a la dépendance System.Data.SQLite et le message d'erreur était le même:

l'image disque de la base de données est mal formée

Dans mon cas, j'ai exécuté le script de vérification suivant et les suivants via SQLiteStudio 3.1.1 .

pragma integrity_check

(Je n'ai aucune idée si ces statistiques pourraient aider, mais je vais quand même les partager ...)

Le fichier DataBase est utilisé au quotidien pendant 1,5 an, via le mode journal de connexion sur la mémoire, et était d'environ 750 Mo de large. Il y avait environ 140 000 enregistrements par table et 6 tables étaient aussi volumineuses.

Après l'exécution du script de vérification d'intégrité , 11 lignes ont été renvoyées après 30 minutes d'exécution.

wrong # of entries in index sqlite_autoindex_MyTableName_1
wrong # of entries in index MyOtherTableAndOrIndexName_1
wrong # of entries in index sqlite_autoindex_MyOtherTableAndOrIndexName_2
etc...

Tous les résultats concernaient les index. Suite à la reconstruction de chaque index, mon problème a été résolu.

reindex sqlite_autoindex_MyTableName_1;
reindex MyOtherTableAndOrIndexName_1;
reindex sqlite_autoindex_MyOtherTableAndOrIndexName_2;

Après la réindexation, le contrôle d'intégrité a abouti à "ok".

J'ai eu cette erreur l'année dernière, et j'ai été restauré la base de données à partir de la sauvegarde, puis réengagé tous les changements, ce qui était un véritable cauchemar ...


-1

pas besoin de s'inquiéter pour un gars de verrouillage de répertoire.

Il vous suffit de faire, si sqllite3 n'est pas installé, tapez la commande ci-dessous,

>sudo apt-get install sqlite3

Ouvrez la base de données SVN en tapant cette commande,

>sqlite3 .svn/wc.db 

Il vous suffit maintenant de supprimer les entrées de verrouillage de SVN DB.

sqlite>  select * from wc_lock;
1|-1           
sqlite>  delete from wc_lock;
sqlite>  select * from wc_lock;
sqlite>  .q

Processus terminé. Vous pouvez travailler sur votre référentiel SVN, faire des opérations de validation, de mise à jour, d'ajout, de suppression sans problème.

:-)


-2

Au cours du développement de l'application, j'ai constaté que les messages provenaient des opérations INSERT et UPDATE fréquentes et massives. Assurez-vous d'insérer et de mettre à jour plusieurs lignes ou données en une seule opération.

var updateStatementString : String! = ""

for item in cardids {

let newstring = "UPDATE "+TABLE_NAME+" SET pendingImages = '\(pendingImage)\' WHERE cardId = '\(item)\';"
            updateStatementString.append(newstring)

        }


        print(updateStatementString)
        let results = dbManager.sharedInstance.update(updateStatementString: updateStatementString)

        return Int64(results)

-4

cd vers le dossier contenant .svn

rm -rf .svn
svn co http://mon.svn/mondepot/ . --force
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.