SQLite 3.51.3 con correzione di un possibile danneggiamento del database in modalità WAL

SQLite 3.51.3 con correzione di un possibile danneggiamento del database in modalità WAL

Il 13 marzo è stato rilasciato un aggiornamento correttivo della versione 3.51.3 del sistema di gestione del database integrato compatto. SQLite. Il codice del progetto è scritto in linguaggio C ed è distribuito come pubblico dominio.

A causa di problemi di retrocompatibilità legati a alcune nuove funzionalità, la versione 3.52.0 (rilasciata il 6 marzo) è stata ritirata.

Elenco delle modifiche della versione 3.51.3:

  • Il 3 marzo uno degli sviluppatori di SQLite (Dan) ha scoperto e risolto un errore che, in rari casi, poteva portare alla corruzione del database, chiamato «bug di reset WAL»:
    • Questo errore si verifica solo nei database in modalità WAL, se più di una connessione apre lo stesso file in thread o processi diversi e se entrambe le connessioni tentano di eseguire una scrittura o creare un checkpoint contemporaneamente.
    • L'errore è legato a un conflitto di accesso ai dati in condizioni di rigide limitazioni temporali. In normali condizioni operative, si verifica molto raramente. Gli sviluppatori non sono riusciti a riprodurre questo errore in condizioni naturali e hanno dovuto aggiungere a SQLite una logica di test speciale che crea intenzionalmente le condizioni per la generazione dell'errore, per assicurarsi che il problema sia risolto.
    • L'errore si verifica quando:
      1. Una connessione esegue un controllo del checkpoint. Questo primo controllo deve essere completato. In altre parole, durante il controllo è necessario copiare con successo tutto il contenuto del file WAL nel database e portare il file WAL a uno stato in cui può essere resettato.
      2. Subito dopo il completamento del primo checkpoint, viene avviato il secondo.
      3. Mentre il secondo checkpoint avviato al passo 2 è in corso, un'altra connessione al database registra una transazione che resetta il file WAL e scrive nuovo contenuto all'inizio del file WAL.
      4. A causa del conflitto di accesso ai dati, il secondo checkpoint allo step 2 non tiene conto che il file WAL è stato resettato a seguito della registrazione della transazione al passo 3. Il secondo checkpoint imposta un valore errato per uno dei campi nell'intestazione dell'indice WAL. Questo campo indica che una parte del file WAL è già stata registrata nel checkpoint, sebbene in realtà non sia così.
      5. La registrazione di transazioni aggiuntive porta a un aumento del numero di pagine nel file WAL, che supera il numero di pagine esistenti al momento del primo checkpoint al passo 1.
      6. In seguito, quando si verifica un terzo checkpoint, essa ignora l'intera transazione o parte di essa registrata nella fase 3. Di conseguenza, le parti della transazione della fase 3 non vengono mai trasferite nel file del database, danneggiando così il file del database.
    • L'errore è probabilmente presente in tutte le versioni di SQLite, a partire dalla 3.7.0 (21.07.2010) fino alla 3.51.2. Sono stati rilasciati anche dei fix per alcune versioni precedenti: 3.44.6 e 3.50.7.
  • Altri piccoli fix.

Fonte: linux.org.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster