svn cleanup: sqlite: l'immagine del disco del database non è valida


93

Stavo cercando di eseguire un'operazione svn cleanupperché non riesco a salvare le modifiche nella mia copia di lavoro e ho ricevuto il seguente errore:

sqllite: l'immagine del disco del database non è valida

La pulizia non è riuscita a elaborare i seguenti percorsi

Cosa posso fare adesso?

Risposte:


98

Ho avuto lo stesso problema. Il seguente post sul blog mi ha aiutato a risolverlo: http://www.polak.ro/svn-e200030-sqlite-database-disk-image-is-malformed.html

Esegui un controllo di integrità sul database sqlite che tiene traccia del repository (/.svn/wc.db):

sqlite3 .svn/wc.db "pragma integrity_check"

Questo dovrebbe riportare alcuni errori.

Quindi potresti essere in grado di ripulirli facendo:

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

Se ci sono ancora errori dopo di che, hai ancora la possibilità di estrarre una nuova copia del repository in una cartella temporanea e copiare la cartella .svn dalla nuova copia a quella vecchia. Quindi la vecchia copia dovrebbe funzionare di nuovo ed è possibile eliminare la cartella temporanea.


6
questo ha effettivamente risolto il mio problema. Grazie mille.
Erdogan Kurtur

17
Cosa fare se viene ancora visualizzato l'errore: l'immagine del disco del database non è valida?
j sarà il

3
@jwill Ho anche ricevuto un errore dopo aver implementato la soluzione data sopra ... Ma quello che ho provato è semplicemente controllare una nuova copia del tuo repository e poi sovrascrivere la cartella .svn della nuova copia di checkout su quella vecchia .. ho risolto il mio problema in questo modo ...
Rushabh Shah

6
Strano, capiscoError: unable to identify the object to be reindexed
Pacerier

4
Il Link polak.ro/… sembra essere definitivamente inattivo.
MadMike,

21

Controllo dell'integrità

sqlite3 .svn/wc.db "pragma integrity_check"

Pulire

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

In alternativa

Potresti essere in grado di scaricare il contenuto del database che può essere letto in un file di backup, quindi rimpiazzarlo in un nuovo file di database:

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
Questo ha aiutato con un errore che stavo avendo con un software diverso, quindi grazie signore!
Azirius

Per me il comando "reindicizza nodi" non è riuscito, ma una soluzione alternativa (ricreare db da dump) mi ha aiutato! Grazie.
EvAlex

1
Non ho scaricato tutto, ma è stato sufficiente. Ho fatto scorrere il file sql e modificato il finale ROLLBACK;in COMMIT;prima di eseguire il .read dump_all.sql.
Jan Katins

2
Questo approccio ora sembra fallire con l'errore 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), tuttavia c'è una soluzione alternativa qui: hanscarpenter.blogspot.com.au/2016/05/…
mpeac

La correzione corretta per l'errore di asserzione è: 1. eseguire sqlite3 .svn/wc.db 'PRAGMA user_version;'sul database originale per ottenere il numero corretto. 2. eseguire sqlite3 .svn/wc.db 'PRAGMA user_version = XXX;'sulla versione ripristinata con il numero corretto.
Cronologia

19

La pulizia SVN non ha funzionato. La cartella SVN sul mio sistema locale è stata danneggiata. Quindi ho appena cancellato la cartella, ricreato una nuova e aggiornato da SVN. Questo ha risolto il problema!


1
Questa è di gran lunga la soluzione più semplice. Ottieni una nuova copia funzionante e lavora con quella: svn co URL.
Jahmic

16

Dopo un blackout di corrente, mi sono imbattuto nell'immagine del disco del database che è un errore non valido e il comando suggerito di reindicizzazione dei nodi non ha risolto tutti i problemi a causa di vincoli violati. Anche la procedura descritta in http://mail-archives.apache.org/mod_mbox/subversion-users/201111.mbox/%3C874nybhpxi.fsf@stat.home.lan%3E non ha risolto il problema.

Soluzione nel mio caso:

  • Esegui nuovamente il checkout del repository svn in una cartella temporanea
  • Copiare, cioè sostituire, il file ".svn / wc.db" dal nuovo checkout a quello corrotto

Questo può essere utile se il tuo checkout svn originale contiene molti file modificati o senza versione e non vuoi passare a un nuovo checkout svn.


13

Ho copiato la cartella .svn dalla directory del mio collega e questo ha risolto il problema.


Qui possiamo anche controllare la nuova copia di lavoro solo nello stesso sistema e quindi sostituire la vecchia cartella .svn con la nuova cartella .svn e in questo modo possiamo anche risolvere questo problema ...
Rushabh Shah

3
  1. controlla questo svn in un altro posto
  2. mostra il file .svn nascosto
  3. sostituire il file wc

questo funziona per me!


2

Forse, potrebbe essere una soluzione:

  1. fare clic con il tasto destro del mouse sul progetto
  2. squadra -> disconnetti
  3. Seleziona: Elimina anche ...

Ora, ricollegati di nuovo:

  1. fare clic con il tasto destro del mouse sul progetto
  2. team -> Condividi progetto
  3. seleziona il tuo repositorie: mio SVN(altro caso: git, ecc.)
  4. seleziona la tua repositoriecartella

Nota:

Nel mio caso, ho eseguito un backup dei miei file. (sicuro di ritorno: P)

Modificare:

Sto parlando di SVNplugin su Eclipse:)


1

Hai visto questo post sul sito di subversion? Potresti anche provare a convalidare e "correggere" il database direttamente come descritto qui . (Nota che non sono un esperto, ho solo fatto una rapida ricerca su Google. Potrebbe non essere affatto correlato ai tuoi problemi).

Personalmente, proverei di nuovo a controllare il repository e ad applicare nuovamente le modifiche. Non sei sicuro che ciò sia possibile nel tuo caso?


Grazie, fammi vedere il tuo suggerimento.
Rubens Mariuzzo

controllare di nuovo è quello che ho finito per fare, sicuramente la soluzione più semplice (a seconda delle modifiche da riapplicare ^^)
elgui

Nel mio caso questo non ha risolto il problema, ha anche causato molti più errori in Tortoise SVN, basta avvertire.
komorra

1

Durante le mie ricerche, ho trovato 2 soluzioni praticabili.

  1. Se stai usando qualsiasi tipo di connessione, ssh, samba, montaggio, scollegamento / smontaggio e ricollegamento / rimontaggio. Riprova, questo spesso ha risolto il problema per me. Dopodiché puoi eseguire la pulizia svn o continuare a lavorare normalmente (a seconda di quando è apparso il problema). Il riavvio del computer ha anche risolto il problema una volta ... sì, è stupido lo so!

  2. Alcune volte tutto ciò che devi fare è rm -rf i tuoi file (o se non hai familiarità con il termine, elimina la cartella svn) e ricontrolla il tuo repository svn ancora una volta. Tieni presente che questo non risolve sempre il problema e potresti anche avere modifiche che non vuoi perdere. Ecco perché lo uso come seconda opzione.

Spero che questo vi aiuti ragazzi!


1

Ho risolto il mio problema di danneggiamento di rep-cache.db del server svn visivo.

Le loro sono due soluzioni.

Arrestare il servizio Visual SVN Server.

Scarica la shell sqllite3.exe dal sito Web sqllite e copiala nella cartella db del repository.

Digita i seguenti comandi al prompt dei comandi nella cartella db del repository.

- Prima soluzione -

sqlite3 rep-cache.db

.clone rep-cache-new.db

premere ctrl + c per uscire da sqllite.

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

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

- Seconda soluzione -

Elimina Il rep-cache.db

del rep-cache.db

verrà creato automaticamente.


Grazie Muhammad - solo l'indizio di cui avevo bisogno! È necessario determinare se il problema riguarda i database sqlite nella copia di lavoro o in quello sul server. Prova il tuo commit sulla riga di comando: se il file viene trasferito con successo e l'errore si verifica durante "Committing Transaction", il problema è probabilmente sul lato server. La risoluzione di Muhammad qui funziona come un fascino. Questo vecchio archivio di listserve ha più dettagli: svn.haxx.se/users/archive-2010-12/0257.shtml
powderflask

1

Ho risolto il problema per un'istanza in cui mi stava accadendo eliminando la cartella .svn nascosta e quindi eseguendo un checkout sulla cartella con lo stesso URL.

Questo non ha sovrascritto nessuno dei miei file modificati e ha semplicemente aggiornato tutti i file esistenti invece di prendere nuove copie dal server.


1

Non sprecare il tuo tempo checking integrityo eliminare i dati dalla work queuetabella perché queste sono soluzioni temporanee e ti ricambieranno dopo un po '.

Basta farne un altro checkoute sostituire la cartella .svn esistente con quella nuova. Fai un updatee poi dovrebbe andare liscio.


0

Se installi Tortoise SVN, vai al task manager e interrompilo. Quindi prova a eliminare la cartella. Funzionerà


0

La risposta contrassegnata potrebbe essere quella corretta, secondo la pulizia di subversion. Ma l'errore è sicuramente generico, che mi ha portato qui, questa pagina delle domande.

Il nostro progetto ha la dipendenza System.Data.SQLite e il messaggio di errore era lo stesso:

l'immagine del disco del database non è valida

Nel mio caso, ho eseguito il seguente script di controllo e quanto segue tramite SQLiteStudio 3.1.1 .

pragma integrity_check

(Non ho idea se queste statistiche aiuterebbero, ma le condividerò comunque ...)

Il file DataBase viene utilizzato nell'uso quotidiano per 1,5 anni, tramite la modalità journal di connessione su Memory, ed era grande circa 750 MB. C'erano circa 140.000 record per tabella e 6 tabelle erano così grandi.

Dopo l'esecuzione dello script Controllo integrità , sono state restituite 11 righe dopo 30 minuti di tempo di esecuzione.

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...

Tutti i risultati riguardavano gli indici. Dopo aver ricostruito ogni indice, il mio problema è stato risolto.

reindex sqlite_autoindex_MyTableName_1;
reindex MyOtherTableAndOrIndexName_1;
reindex sqlite_autoindex_MyOtherTableAndOrIndexName_2;

Dopo la reindicizzazione, il controllo dell'integrità è risultato "ok".

Ho ricevuto questo errore l'anno scorso e ho ripristinato il DB dal backup, quindi ho reimpegnato tutte le modifiche, il che è stato un vero incubo ...


-1

non c'è bisogno di preoccuparsi per un blocco di directory ragazzi.

Quello che devi fare è, se sqllite3 non è installato, digita sotto il comando,

>sudo apt-get install sqlite3

Apri il database SVN digitando questo comando,

>sqlite3 .svn/wc.db 

Ora non ti resta che rimuovere le voci di blocco da SVN DB.

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

Processo completato. Puoi lavorare sul tuo repository SVN, eseguire commit, aggiornare, aggiungere, rimuovere operazioni senza problemi.

:-)


-2

Durante lo sviluppo dell'app ho scoperto che i messaggi provengono dalle frequenti e massicce operazioni di INSERT e UPDATE. Assicurati di INSERIRE e AGGIORNARE più righe o dati in un'unica operazione.

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 nella cartella contenente .svn

rm -rf .svn
svn co http://mon.svn/mondepot/ . --force
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.