SVN-Bereinigung: SQLite: Das Image der Datenbankdiskette ist fehlerhaft

91

Ich habe versucht, eine zu machen, svn cleanupweil ich die Änderungen in meiner Arbeitskopie nicht festschreiben kann, und ich habe den folgenden Fehler erhalten:

sqllite: Das Image der Datenbankdiskette ist fehlerhaft

Die Bereinigung konnte die folgenden Pfade nicht verarbeiten

Was kann ich jetzt tun?

Rubens Mariuzzo
quelle

Antworten:

97

Ich hatte das gleiche Problem. Der folgende Blog-Beitrag hat mir bei der Lösung geholfen: http://www.polak.ro/svn-e200030-sqlite-database-disk-image-is-malformed.html

Sie führen eine Integritätsprüfung für die SQLite-Datenbank durch, die das Repository verfolgt (/.svn/wc.db):

sqlite3 .svn/wc.db "pragma integrity_check"

Das sollte einige Fehler melden.

Dann können Sie sie möglicherweise aufräumen, indem Sie Folgendes tun:

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

Wenn danach immer noch Fehler auftreten, haben Sie weiterhin die Möglichkeit, eine neue Kopie des Repositorys in einen temporären Ordner auszuchecken und den .svn-Ordner von der neuen Kopie in den alten zu kopieren. Dann sollte die alte Kopie wieder funktionieren und Sie können den temporären Ordner löschen.

HenningJ
quelle
6
das hat mein Problem tatsächlich gelöst. vielen Dank.
Erdogan Kurtur
17
Was tun Sie, wenn immer noch ein Fehler auftritt: Das Image der Datenbankdiskette ist fehlerhaft?
J wird
3
@jwill Ich habe auch einen Fehler nach der Implementierung der oben angegebenen Lösung erhalten ... Aber ich habe versucht, einfach eine neue Kopie Ihres Repositorys auszuchecken und dann den .svn-Ordner der neuen Auscheckkopie in die alte zu überschreiben. Ich habe mein Problem so gelöst ...
Rushabh Shah
6
Error: unable to identify the object to be reindexed
Seltsam
4
Der Link polak.ro/… scheint permanent ausgefallen zu sein.
MadMike
21

Integritätsprüfung

sqlite3 .svn/wc.db "pragma integrity_check"

Aufräumen

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

Alternative

Möglicherweise können Sie den Inhalt der Datenbank, der in eine Sicherungsdatei eingelesen werden kann, sichern und dann wieder in eine neue Datenbankdatei schlürfen:

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
matte Verbrennungen
quelle
2
Dies half bei einem Fehler, den ich mit einer anderen Software hatte. Vielen Dank, Sir!
Azirius
Für mich ist der Befehl "Knoten neu indizieren" fehlgeschlagen, aber eine alternative Problemumgehung (Neuerstellung der Datenbank aus dem Speicherauszug) hat mir geholfen! Vielen Dank.
EvAlex
1
Ich habe nicht alles abgeladen, aber es war genug. Scrollte durch die SQL-Datei und änderte das Finale ROLLBACK;in COMMIT;vor dem Doung der .read dump_all.sql.
Jan Katins
2
Dieser Ansatz scheint nun mit dem Fehler zu scheitern 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), es gibt jedoch eine Problemumgehung
mpeac
Die richtige Lösung für den Assertionsfehler lautet: 1. Führen Sie sqlite3 .svn/wc.db 'PRAGMA user_version;'die ursprüngliche Datenbank aus, um die richtige Nummer zu erhalten. 2. Führen Sie sqlite3 .svn/wc.db 'PRAGMA user_version = XXX;'die wiederhergestellte Version mit der richtigen Nummer aus.
Chronial
18

Die SVN-Bereinigung hat nicht funktioniert. Der SVN-Ordner auf meinem lokalen System wurde beschädigt. Also habe ich einfach den Ordner gelöscht, einen neuen neu erstellt und von SVN aktualisiert. Das hat das Problem gelöst!

EmKay
quelle
1
Dies ist bei weitem die einfachste Lösung. Holen Sie sich eine neue Arbeitskopie und arbeiten Sie damit: svn co URL.
Jahmic
16

Nach einem Stromausfall stieß ich auf einen fehlerhaften Fehler im Datenbankdatenträger-Image , und der vorgeschlagene Befehl zum erneuten Indizieren von Knoten behebte nicht alle Probleme aufgrund von verletzten Einschränkungen. Auch das unter http://mail-archives.apache.org/mod_mbox/subversion-users/201111.mbox/%[email protected]%3E beschriebene Verfahren das Problem nicht behoben.

Lösung in meinem Fall:

  • Checken Sie das SVN-Repository erneut in einen temporären Ordner aus
  • Kopieren Sie die Datei ".svn / wc.db" von der neuen Kasse in die beschädigte Datei, dh ersetzen Sie sie

Dies kann nützlich sein, wenn Ihre ursprüngliche SVN-Kasse viele geänderte oder nicht konvertierte Dateien enthält und Sie nicht zu einer neuen SVN-Kasse wechseln möchten.

Thomas853
quelle
Dies löste mein Problem.
Jhollman
13

Ich habe über den .svn-Ordner aus dem Verzeichnis meines Peer Workers kopiert und das Problem wurde behoben.

user3884070
quelle
Hier können wir auch neue Arbeitskopien nur im selben System auschecken und dann den alten .svn-Ordner durch den neuen .svn-Ordner ersetzen. Auf diese Weise können wir auch dieses Problem lösen ...
Rushabh Shah
3
  1. Schauen Sie sich diesen SVN an einem anderen Ort an
  2. versteckte .svn-Datei anzeigen
  3. Ersetzen Sie die WC-Datei

das funktioniert bei mir!

Kaikai
quelle
2

Vielleicht könnte eine Lösung sein:

  1. Rechtsklick über Projekt
  2. Team -> trennen
  3. Wählen Sie: Auch löschen ...

Stellen Sie jetzt erneut eine Verbindung her:

  1. Rechtsklick über Projekt
  2. Team -> Projekt teilen
  3. Wählen Sie Ihre repositorie: meineSVN (anderer Fall: Git, etc)
  4. Wählen Sie Ihren repositorieOrdner

Hinweis:

In meinem Fall habe ich eine Sicherungskopie meiner Dateien erstellt. (sicher zurück: P)

Bearbeiten:

Ich spreche über SVNPlugin auf Eclipse:)

mfruizs2
quelle
1

Hast du diesen Beitrag auf der Subversion-Site gesehen? Sie können möglicherweise auch versuchen, die Datenbank direkt zu validieren und zu "reparieren", wie hier beschrieben . (Beachten Sie, dass ich kein Experte bin. Ich habe nur eine schnelle Google-Suche durchgeführt. Möglicherweise hängt das überhaupt nicht mit Ihren Problemen zusammen.)

Persönlich würde ich versuchen, das Repo erneut zu überprüfen und Ihre Änderungen erneut zu übernehmen. Sie sind sich nicht sicher, ob dies in Ihrem Fall möglich ist?

Mightymuke
quelle
Danke, lassen Sie mich Ihren Vorschlag sehen.
Rubens Mariuzzo
Das erneute Auschecken ist das, was ich letztendlich getan habe, definitiv die einfachste Lösung (abhängig von Änderungen, die erneut
angewendet werden müssen
Ich mein Fall dies nicht das Problem gelöst, verursachte auch viel mehr Fehler in Tortoise SVN, nur warnen.
Komorra
1

Während meiner Forschungen habe ich zwei praktikable Lösungen gefunden.

  1. Wenn Sie irgendeine Art von Verbindung verwenden, ssh, samba, mount, trennen / unmounten und wieder verbinden / wieder montieren. Versuchen Sie es noch einmal, dies hat das Problem für mich oft gelöst. Danach können Sie die SVN-Bereinigung durchführen oder einfach normal weiterarbeiten (je nachdem, wann das Problem aufgetreten ist). Ein Neustart meines Computers hat das Problem auch einmal behoben ... ja, ich weiß, es ist dumm!

  2. Manchmal müssen Sie nur Ihre Dateien rm -rf (oder wenn Sie mit dem Begriff nicht vertraut sind, löschen Sie einfach Ihren svn-Ordner) und überprüfen Sie Ihr svn-Repository erneut. Bitte beachten Sie, dass dies das Problem nicht immer löst und Sie möglicherweise auch Änderungen haben, die Sie nicht verlieren möchten. Deshalb benutze ich es als zweite Option.

Hoffe das hilft euch!

Psykehoe
quelle
1

Ich habe mein Problem der Beschädigung des visuellen SVN-Servers rep-cache.db gelöst.

Es gibt zwei Lösungen.

Beenden Sie den Visual SVN Server-Dienst.

Laden Sie die sqllite3.exe-Shell von der sqllite-Website herunter und kopieren Sie sie in den Datenbankordner von repo.

Geben Sie die folgenden Befehle an der Eingabeaufforderung in den Datenbankordner des Repos ein.

- Erste Lösung -

sqlite3 rep-cache.db

.clone rep-cache-new.db

Drücken Sie Strg + C, um sqllite zu beenden.

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

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

- 2. Lösung -

Löschen Die Datei rep-cache.db

del rep-cache.db

es wird automatisch erstellt.

Muhammad Yousaf Sulahria
quelle
Danke Muhammad - genau der Hinweis, den ich brauchte! Man muss feststellen, ob das Problem mit der SQLite-Datenbank (en) in Ihrer Arbeitskopie oder der auf dem Server liegt. Versuchen Sie Ihr Commit in der Befehlszeile. Wenn die Datei erfolgreich übertragen wurde und der Fehler beim Festschreiben der Transaktion auftritt, liegt das Problem wahrscheinlich auf der Serverseite. Mohammeds Vorsatz hier wirkt wie ein Zauber. Dieses alte Listserve-Archiv enthält weitere Details: svn.haxx.se/users/archive-2010-12/0257.shtml
Pulverflasche
1

Ich habe dies für eine Instanz behoben, die mir passiert ist, indem ich den versteckten .svn-Ordner gelöscht und dann eine Überprüfung des Ordners unter derselben URL durchgeführt habe.

Dadurch wurden keine meiner geänderten Dateien überschrieben und nur alle vorhandenen Dateien versioniert, anstatt neue Kopien vom Server abzurufen.

David Liljeblad
quelle
1

Verschwenden Sie keine Zeit damit, checking integrityDaten aus der work queueTabelle zu löschen, da dies vorübergehende Lösungen sind und Sie nach einer Weile zurückschlagen werden.

checkoutMachen Sie einfach einen anderen und ersetzen Sie den vorhandenen .svn-Ordner durch den neuen. Mach ein updateund dann sollte es glatt gehen.

Jawad Khan
quelle
Was ist mit den vorgenommenen Änderungen?
aagjalpankaj
0

Wenn Sie den Tortoise SVN installieren, gehen Sie zum Task-Manager und beenden Sie ihn. Versuchen Sie dann, den Ordner zu löschen. es wird klappen

Ramesh Babu
quelle
0

Die markierte Antwort könnte laut Subversion-Bereinigung die richtige sein. Aber der Fehler ist definitiv ein allgemeiner, der mich hierher geführt hat, diese Fragenseite.

Unser Projekt hat die Abhängigkeit System.Data.SQLite und die Fehlermeldung war dieselbe:

Das Image der Datenbankdiskette ist fehlerhaft

In meinem Fall habe ich das folgende Überprüfungsskript und die folgenden Schritte über SQLiteStudio 3.1.1 ausgeführt .

pragma integrity_check

(Ich habe keine Ahnung, ob diese Statistiken helfen würden, aber ich werde sie trotzdem teilen ...)

Die Datenbankdatei wird 1,5 Jahre lang im täglichen Gebrauch über den Verbindungsjournalmodus im Speicher verwendet und war etwa 750 MB groß. Es gab ungefähr 140.000 Datensätze pro Tabelle und 6 Tabellen waren so groß.

Nach der Ausführung des Integrity Check- Skripts wurden nach 30 Minuten Ausführungszeit 11 Zeilen zurückgegeben.

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

Alle Ergebnisse betrafen die Indizes. Nach der Neuerstellung der einzelnen Indizes wurde mein Problem behoben.

reindex sqlite_autoindex_MyTableName_1;
reindex MyOtherTableAndOrIndexName_1;
reindex sqlite_autoindex_MyOtherTableAndOrIndexName_2;

Nach der erneuten Indizierung ergab die Integritätsprüfung "OK".

Ich habe diesen Fehler letztes Jahr erhalten und die Datenbank aus dem Backup wiederhergestellt und dann alle Änderungen erneut festgeschrieben, was ein wahrer Albtraum war ...

Ich hoffe, diese Antwort hilft irgendwie.

LysanderM
quelle
-1

Keine Notwendigkeit, sich um eine Verzeichnissperre zu kümmern.

Sie müssen lediglich Folgendes tun: Wenn sqllite3 nicht installiert ist, geben Sie den folgenden Befehl ein:

>sudo apt-get install sqlite3

Öffnen Sie die SVN-Datenbank, indem Sie diesen Befehl eingeben.

>sqlite3 .svn/wc.db 

Jetzt müssen Sie nur noch Sperreneinträge aus der SVN-Datenbank entfernen.

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

Prozess abgeschlossen. Sie können an Ihrem SVN-Repository arbeiten, Vorgänge ohne Probleme festschreiben, aktualisieren, hinzufügen und entfernen.

:-)

Mukesh Bhoj
quelle
-2

Während der App-Entwicklung stellte ich fest, dass die Nachrichten von den häufigen und massiven INSERT- und UPDATE-Operationen stammen. Stellen Sie sicher, dass Sie mehrere Zeilen oder Daten in einem einzigen Vorgang einfügen und aktualisieren.

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
quelle
-4

CD in Ordner mit .svn

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