sicherheit von sqlite?



  • schreibe gerade ein programm (c++) für datenerfassung.
    die daten sind sehr wichtig.
    jetzt hab ich mir folgendes vor gestellt:

    user gibt daten ein, das programm schreibt sie gerade in die sqlite db
    und dann STROMAUSFALL!!!

    habe mir überlegt, daß ich über einen timer immer ein backup erstelle,
    aber wie kann ich dann überprüfen, welche die intakte db ist?
    es kann ja der stromausfall passieren, wenn das original geschrieben wird,
    oder das backup.

    meine frage, gibts eine möglichkeit (zB über eine checksum der db) herraus
    zu finden, welche in ordnung ist?

    wenn die letzten paar daten verschwunden sind, ist mir das egal, aber die db
    darf ja nicht beschädigt werden.

    danke



  • Schau dir mal http://sqlite.org/atomiccommit.html an. Da steht unter anderem:

    SQLite assumes that the operating system will buffer writes and that a write request will return before data has actually been stored in the mass storage device. SQLite further assumes that write operations will be reordered by the operating system. For this reason, SQLite does a "flush" or "fsync" operation at key points. SQLite assumes that the flush or fsync will not return until all pending write operations for the file that is being flushed have completed. We are told that the flush and fsync primitives are broken on some versions of windows and Linux. This is unfortunate. It opens SQLite up to the possibility of database corruption following a power loss in the middle of a commit. However, there is nothing that SQLite can do to test for or remedy the situation. SQLite assumes that the operating system that it is running on works as advertised. If that is not quite the case, well then hopefully you will not lose power too often.

    Mit atomic commits bekommst du also das, was du möchtest, vorausgesetzt dein Betriebssystem implementiert flush und/oder fsync korrekt, was wohl nicht immer gegeben ist.



  • Probiere es mal mit Transaktionen.

    Es ist nicht alles so stabil wie Btrieve unter Novell 🙂
    (Lasttest: volle Kanne und Stecker des Servers rausziehen. Wenn's die db 3mal
    überlebt taugt sie etwas. Mit SQLite habe ich das noch nicht probiert).

    Wenn ein Export der Daten in ASCII oder CSV ohne Problem und Fehlermeldungen
    durchläuft sollte auch die Datei ok sein. Ich würde das da dran aufhängen.



  • danke, werd mir das bezerzigen. aber das mit exportieren ist keine dumme idee.


Anmelden zum Antworten