Nel SQLite documentation nella funzione di registro write-ahead introdotto nella versione 3.7, ci sono alcuni commenti che mi hanno confuso un po '.Quanto è sicuro SQLal WAL in caso di interruzioni di corrente?
La pagina collegata indica che "la sincronizzazione del contenuto sul disco non è necessaria, purché l'applicazione sia disposta a sacrificare la durata a seguito di una perdita di alimentazione". Poi un paio di paragrafi in basso, dice "Il checkpoint richiede operazioni di sincronizzazione per evitare la possibilità di danneggiamento del database dopo una perdita di potenza o un riavvio".
Così è il mio database a maggior rischio di corruzione in caso di interruzione dell'alimentazione se uso WAL?
So che questa risposta è vecchia, ma ha un errore piuttosto importante. Non perderai le transazioni dall'ultimo checkpoint, perderai le transazioni che non sono ancora state completamente scritte sul WAL. Se sincrono = NORMALE, non attende un fsync() durante la scrittura della transazione nel WAL, quindi potresti perdere quella transazione se perdi energia prima che sia completamente scritta. Una volta nel WAL, non andrà perso, indipendentemente dal checkpoint. –
Fino al 2016-02-17 https://www.sqlite.org/docsrc/info/3540d671bcc4835c la documentazione SQLite diceva che synchronous = NORMAL per impostazione predefinita in modalità WAL ... ora dice synchronous = FULL - impostazione predefinita molto più sicura. Quindi, perderai le transazioni prima del checkpoint solo se imposti la modalità sincrona = NORMALE –