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?

Rubens Mariuzzo
la source

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.

HenningJ
la source
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
brûlures mates
la source
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!

EmKay
la source
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/%[email protected]%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.

Thomas853
la source
13

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

user3884070
la source
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!

Kaikai
la source
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:)

mfruizs2
la source
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?

Mightymuke
la source
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!

Psykehoe
la source
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éé.

Muhammad Yousaf Sulahria
la source
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.

David Liljeblad
la source
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.

Jawad Khan
la source
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

Ramesh Babu
la source
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 ...

LysanderM
la source
-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.

:-)

mukesh bhoj
la source
-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)
Jorge Cardenas
la source
-4

cd vers le dossier contenant .svn

rm -rf .svn
svn co http://mon.svn/mondepot/ . --force
mmbenyoub
la source