2017-12-03 8 views
1

Bitte haben Sie Geduld mit mir - ich werde versuchen, die richtige Terminologie in dieser Frage zu verwenden. Ich habe eine iOS-App, mit der die Benutzer seit mehreren Jahren Backups ihrer mit Core Data unterstützten sqlite-Datenbank erstellen können. Aus irgendeinem Grund, damals, habe ich die Pragma-Option für journal_mode auf "MEMORY" gesetzt, was bedeutet, dass jede der Backups, die in den letzten Jahren gemacht wurden, keine WAL- oder SHM-Datei haben. Ich überschreibe meinen gesamten Datenbankcode, und ich weiß, dass der aktuelle Standard journal_mode für iOS "WAL" ist. Wenn ich ein Backup, das mit journal_mode "MEMORY" erstellt wurde, importiere, möchte ich irgendwie mit der Datei im WAL-Modus arbeiten (ich möchte, dass alle neuen Backups gleich sind - im WAL-Modus), aber ich bin mir nicht sicher ist sogar möglich. Kann eine einzelne .sqlite, die nie eine WAL- oder SHM-Datei hatte, gezwungen werden, sie zu erstellen? Ich versuche, die NSPersistentStore-Methoden zu verwenden, um Sicherungen zu erstellen und Daten jetzt wieder herzustellen, und ich erinnere mich zu lesen, dass die während des Prozesses (dh der journal_mode) verwendeten Optionen konsistent bleiben müssen (ich werde den Link dafür veröffentlichen, wenn ich es finden kann)). Ich glaube, da ich keine WAL-Datei habe, muss ich für den Import den journal_mode "MEMORY" oder "DELETE" verwenden. Ich bin mir jedoch nicht sicher, ob dies bedeutet, dass die Datei für immer ohne eine WAL-Datei funktionieren muss, oder ob ich etwas tun kann, um es im WAL-Modus zu betreiben. Ich hoffe, das macht Sinn - es ist ein bisschen verwirrend für mich, aber ich würde mich freuen, wenn ich darüber nachdenke, wie ich dieses Problem angehen kann.Kann ein .sqlite-Backup von Core-Daten ohne WAL-Datei im WAL-Modus wiederhergestellt werden?

Antwort

2

Sie können den Journalmodus einer Datenbank jederzeit ändern, sofern Sie exklusiven Zugriff haben. öffne es einfach und führe das PRAGMA aus. (Tatsächlich ist dies die einzige Methode, um den WAL-Modus zu aktivieren.)

Bitte beachten Sie, dass nur der WAL-Modus persistent in der Datenbankdatei gespeichert ist. jeder andere Journalmodus ist eine Eigenschaft der Verbindung; Wenn eine Nicht-Datei-WAL geöffnet ist, befindet sie sich standardmäßig im DELETE-Modus.

+0

Ehrfürchtig. Vielen Dank. – SAHM

Verwandte Themen