Che cos'è il formato di file DB-JOURNAL?
I file con l'estensione .db-journal contengono le immagini delle pagine necessarie per il ripristino di un database SQLite in caso di fallimento di una transazione. Si tratta di file temporanei creati da SQLite nella stessa directory in cui è memorizzato il database. Non dovrebbero essere visibili al termine della transazione, poiché SQLite li cancella automaticamente al COMMIT o al ROLLBACK.
Grazie ai file journal di rollback delle transazioni con l'estensione .db-journal, è possibile garantire l'atomicità delle transazioni nel database. Un'applicazione che opera sui dati del database e che si blocca a metà transazione non lascerà operazioni incomplete - queste verranno riportate allo stato precedente all'inizio della transazione. Un file .db-journal è presente sul disco:
- durante l'esecuzione di una transazione di scrittura (modalità journal DELETE, l'impostazione predefinita di SQLite),
- quando una transazione è stata interrotta da un crash - fino a quando la connessione successiva non apre il database,
- quando il database è in modalità di blocco esclusivo (
PRAGMA locking_mode=EXCLUSIVE) - finché non viene disattivata.
SQLite può utilizzare diversi file sidecar temporanei per garantire la coerenza e la sicurezza delle operazioni del database. .db-journal è il classico journal di rollback; .db-wal e .db-shm svolgono il ruolo equivalente nella più recente modalità WAL (Write-Ahead Log).
Nomenclatura dei file .db-journal
Il file journal viene nominato aggiungendo -journal al nome completo del file del database. Ad esempio, se il database è salvato come baza.db, il file temporaneo si chiamerà baza.db-journal e sarà memorizzato nella stessa directory. I file temporanei non sono normalmente visibili agli utenti. In caso di crash o interruzione di corrente, il journal rimane nella directory fino alla successiva apertura del database - SQLite rileva quindi il «hot journal», riproduce le immagini delle pagine salvate per ripristinare lo stato precedente alla transazione e cancella automaticamente il journal.
Non si dovrebbe mai eliminare un file .db-journal mentre è in corso una transazione di scrittura, poiché ciò corromperebbe il database. Un file .db-journal persistente dopo una chiusura pulita indica quasi sempre un crash precedente; SQLite gestisce il ripristino in modo sicuro alla successiva apertura. Nella modalità WAL (PRAGMA journal_mode=WAL), introdotta in SQLite 3.7.0 (luglio 2010), il file .db-journal non viene utilizzato affatto - un file .db-wal ne prende il posto. La maggior parte dei database delle applicazioni moderne è passata alla modalità WAL per una migliore concorrenza di lettura.
Sicurezza e incolumità
RISCHIO: LOWNon eseguibile; dati binari per il ripristino post-crash. L'eliminazione di un -journal mentre il database è in fase di scrittura corromperà il database - il principale rischio operativo. I journal residui dai crash possono essere lasciati in sicurezza finché SQLite non li ripristina automaticamente. Un -journal può contenere dati sensibili non confermati della transazione interrotta (scritture parziali di messaggi, credenziali, ecc.); trattare con la stessa riservatezza del database principale. Non aprire o distribuire un -journal isolatamente senza il database principale.
Dettagli del formato
in sintesiProgrammi che aprono file DB-JOURNAL
Dettagli tecnici
specifiche approfondite| Tipo di formato | Journal di rollback delle transazioni temporaneo binario (file sidecar SQLite) |
| Magic bytes | Header di 8 byte: 0xD9 0xD5 0x05 0xF9 0x20 0xA1 0x63 0xD7 (hot/persistent journal) |
| Ordine dei byte | Big-endian (campi dell'header del journal memorizzati in network byte order) |
| Dimensione header journal | 28 byte (campi per conteggio pagine, nonce casuale, dimensione settore, dimensione pagina) |
| Codifica | Binaria - memorizza immagini testuali delle pagine del database SQLite 3 copiate prima della modifica |
| Checksum per pagina | Due interi a 32 bit calcolati dal nonce e dai dati della pagina; una mancata corrispondenza segnala un journal obsoleto o incompleto |
| Dimensione tipica del file | Da 0 byte a centinaia di MB a seconda di quante pagine ha toccato la transazione interrotta |
| Modalità journal | Utilizzato solo nella modalità journal DELETE (predefinita di SQLite); non creato in modalità WAL |
| Convenzione di denominazione | Percorso del database principale con -journal aggiunto (es. mydata.db → mydata.db-journal) |
| Meccanismo di ripristino | SQLite rileva un hot journal all'apertura della connessione, riproduce le immagini delle pagine per ripristinare lo stato pre-transazione, quindi elimina il journal |
| Sostituzione WAL | La modalità WAL (.db-wal + .db-shm), introdotta in SQLite 3.7.0 (luglio 2010), è preferita per carichi di lavoro concorrenti e non utilizza il file .db-journal |
| Rilasciato | SQLite 1.0, 2000 (rollback journal is the original journaling mechanism) |
| Ultima versione | SQLite 3.x current - format unchanged since early SQLite 3; superseded in practice by WAL (-wal) |
| Standard aperto | Sì · royalty-free |
| Specifica | www.sqlite.org |
Conversioni DB-JOURNAL
Domande e risposte della community
chiesto dagli utentiAncora nessuna domanda - sii il primo a chiedere informazioni sui file DB-JOURNAL.