Che cos'è il formato di file DB-WAL?
I file .db-wal sono utilizzati dal motore di database SQLite (dalla versione 3.7.0, rilasciata a luglio 2010) nella modalità di journaling WAL (Write-Ahead Logging).
Contenuto dei file DB-WAL
I file con estensione .db-wal contengono dati di log write-ahead per un database SQLite associato. Tali file vengono creati e utilizzati mentre un database è aperto e attivamente modificato. Un file .db-wal memorizza le modifiche al database confermate - intere pagine di database - che non sono ancora state scritte («checkpointed») nel file .db principale. Questo approccio write-ahead è più veloce rispetto alla modifica diretta delle pagine del database in loco e garantisce la durabilità: in caso di improvvisa interruzione di corrente o crash del sistema, SQLite può riprodurre il WAL per recuperare tutte le transazioni confermate.
Ogni file .db-wal inizia con un'intestazione di 32 byte contenente un numero magico di 4 byte (0x377f0682 per checksum little-endian, 0x377f0683 per big-endian), valori salt e un checksum cumulativo. Il corpo è costituito da frame: un'intestazione di frame di 24 byte più una pagina di database completa ciascuno. I valori salt nell'intestazione invalidano i frame obsoleti dopo un checkpoint, prevenendo riproduzioni accidentali.
Utilizzo dei file DB-WAL
La gestione dei log .db-wal è completamente automatizzata dal motore SQLite. Un file compagno .db-shm (indice di memoria condivisa) è sempre presente accanto al WAL mentre il database è aperto. Il file .db-wal scompare automaticamente una volta che tutte le modifiche sono state sottoposte a checkpoint - la soglia predefinita di wal_autocheckpoint è di 1000 pagine. Il meccanismo WAL sottostante è ampiamente utilizzato sui dispositivi mobili; i database sulle app Android e iOS operano frequentemente in modalità WAL per migliorare la concorrenza e le prestazioni di scrittura.
Sicurezza e incolumità
RISCHIO: LOWUn .db-wal è costituito da dati inerti, non da codice eseguibile, quindi non può essere eseguito da solo. I rischi reali sono operativi, non legati a malware: (1) eliminare o perdere il -wal mentre il database è aperto, o dopo un crash, scarta le transazioni confermate più recenti - esegui il backup di -db, -wal e -shm insieme; (2) il WAL di un database di un'app può contenere dati sensibili non ancora sottoposti a checkpoint (messaggi, token, cronologia), quindi trattalo come riservato. Se il database principale è crittografato (SQLCipher/SEE), anche il -wal è crittografato.
Dettagli del formato
in sintesiProgrammi che aprono file DB-WAL
Dettagli tecnici
specifiche approfondite| Magic bytes | 0x377f0682 all'offset 0 (checksum little-endian) o 0x377f0683 (checksum big-endian) |
| Dimensione intestazione | 32 byte contenenti magic, versione del formato file, dimensione pagina, sequenza checkpoint, coppia salt e checksum |
| Struttura frame | Intestazione frame di 24 byte + una pagina di database completa per frame |
| Dimensione pagina | Corrisponde alla dimensione della pagina del database SQLite principale (tipicamente 4096 byte) |
| Checksum | Checksum cumulativo di 8 byte (due parole a 32 bit) in ogni intestazione di frame e nell'intestazione WAL |
| Invalidazione salt | Due valori salt a 32 bit vengono randomizzati dopo ogni checkpoint, invalidando eventuali frame obsoleti |
| File compagno | Sempre accoppiato con un file .db-shm (indice di memoria condivisa) mentre il database è aperto |
| Convenzione di denominazione | Nome del file del database con l'aggiunta di -wal (es. mydata.db-wal) |
| Attivazione | Creato solo quando il database è impostato in modalità WAL (PRAGMA journal_mode=WAL) |
| Auto-checkpoint | Il valore predefinito di wal_autocheckpoint a 1000 pagine limita la crescita massima del WAL prima del checkpoint |
| Campo versione formato | L'intestazione WAL codifica la versione della libreria SQLite come 3007000 (SQLite 3.7.0, luglio 2010) |
| Crittografia | Nessuna per impostazione predefinita; crittografato quando il database utilizza l'estensione SEE o SQLCipher |
| Rilasciato | SQLite 3.7.0, July 2010 (WAL journaling mode) |
| Ultima versione | WAL file format magic 0x377f0682 (little-endian) / 0x377f0683 (big-endian) |
| Standard aperto | Sì · royalty-free |
| Specifica | www.sqlite.org |
Conversioni DB-WAL
Domande e risposte della community
chiesto dagli utentiAncora nessuna domanda - sii il primo a chiedere informazioni sui file DB-WAL.