2009-09-21 9 views
8

Ich öffne die Datenbankdatei und erhalte eine Datenbankverbindung mit der Methode open() von sqlite3 und die Verbindung wird nicht geschlossen, bis das Programm beendet wird. Wenn ein unerwarteter Fehler auftritt, wie z. B. plötzliches Ausschalten des Computers oder Absturz des Betriebssystems, wird der Modus der Datenbankdatei beschädigt oder sein Griff verloren? Genauer gesagt, kann es beschreibbar bleiben, wenn ich meinen Computer neu starte? Übrigens interessiert mich der Datenverlust nicht, wenn Fehler auftreten.Wird die Datenbankdatei von SQLite3 beschädigt, wenn das System plötzlich herunterfährt oder abstürzt?

Vielen Dank!

Antwort

12

SQLite ist speziell entworfen, um vor diesem zu schützen. Von der offiziellen SQLite is Transactional Seite:

Alle Änderungen innerhalb einer einzigen Transaktion in SQLite entweder auftreten ganz oder gar nicht, auch wenn der Akt die Änderung aus auf die Festplatte zu schreiben von

unterbrochen
  • ein Programmabsturz,
  • ein Betriebssystemabsturz oder
  • ein Stromausfall.

Der Anspruch des vorherigen Absatzes ist ausführlich in der SQLite geprüft Regressionstestsuite ein spezielles Testgeschirr verwenden, das die Auswirkungen auf eine Datenbankdatei von Betriebssystemabstürzen und Strom Ausfälle simuliert.

Sie könnten auch in dem SQLite Artikel Atomic Commit in SQLite interessiert sein, wenn Sie die spezifischen Details wissen müssen, wie sie zum Schutz gegen Abstürze wie die oben genannten.


nach einem Absturz In Bezug auf Schreiben: (von File Locking and Concurrency)

Ein heißen Journal erstellt wird, wenn ein Prozess in der Mitte eines Datenbank-Update und einem Programm oder Betriebssystemabsturz oder Stromausfall verhindern die Aktualisierung vom Abschluss. Heiße Journale sind eine Ausnahmebedingung. Heiße Journale existieren, um sich von Abstürzen und Stromausfällen zu erholen. Wenn alles korrekt funktioniert (das heißt, wenn es keine Abstürze oder Stromausfälle gibt), erhalten Sie nie ein heißes Journal.

Das Schlimmste, was passieren kann, ist, dass Sie das heiße Journal löschen müssen, das nach einem Absturz übrig geblieben ist.

+0

Danke! Ich möchte auch wissen, ob die Datenbankdatei (*. Db) beschreibbar bleiben wird, wenn ein Stromausfall auftritt, während einige Änderungen in die Datenbank geschrieben werden. – quantity

+0

@quantity Die Sperrung erfolgt in der Betriebssystemebene, so dass nach einem plötzlichen Fehler und nach dem Neustart der fschk-Code dies aufheben sollte und die Datei wieder zugänglich sein wird.Das Sperren erfolgt nicht durch Ändern der Dateiattribute. Auch aus den Artikelreferenzen in der Antwort wird klar, dass "heiße Journale" beim Zugriff auf die DB-Datei automatisch gehandhabt werden. – Ber

+0

Sie sollten niemals eine heiße Journaldatei löschen. Siehe die offizielle Dokumentation: [Wie man eine SQLite-Datenbankdatei beschädigt] (http://www.sqlite.org/howtocorrupt.html), Abschnitt 1.3. –

1

alles könnte bei plötzlichem Ausschalten passieren. Allerdings würde ich UPS vorschlagen, jedes Risiko zu mindern.

+0

Und alles kann aufgrund kosmischer Strahlung passieren, aber in der Praxis wird eine sqlite3-Datenbank im Falle eines plötzlichen Stromausfalls auf vorhersagbaren Dateisystemen in der Regel konsistent bleiben. – Arelius

4

Da Sqlite ACID-konform ist, sollte ein Ausschalten nicht zum Problem werden.

http://en.wikipedia.org/wiki/ACID

+0

Ich befürchte, das Ausschalten würde sich auf die Eigenschaften der Datei auswirken und es wird überhaupt nicht geöffnet oder ich kann keine Daten darin schreiben. – quantity

+0

@quantity, warum hast du Angst davor? Solange Sie die Journaldatei nicht löschen, sollte sqlite3 die Datenbank im Falle eines plötzlichen Stromausfalls reparieren können. – Arelius