Hva er DB-WAL-filformatet?
.db-wal-filer brukes av SQLite-databasemotoren (siden versjon 3.7.0, utgitt juli 2010) i WAL (Write-Ahead Logging) journaliseringsmodus.
Innholdet i DB-WAL-filer
Filer med filendelsen .db-wal inneholder loggdata for en tilhørende SQLite-database. Slike filer opprettes og brukes mens en database er åpen og blir aktivt endret. En .db-wal-fil lagrer bekreftede databaseendringer - komplette databasesider - som ennå ikke er skrevet («checkpointed») tilbake til hovedfilen .db. Denne tilnærmingen er raskere enn å endre databasesider direkte på plass, og sikrer holdbarhet: i tilfelle et plutselig strømbrudd eller systemkrasj, kan SQLite spille av WAL-filen for å gjenopprette alle bekreftede transaksjoner.
Hver .db-wal-fil starter med en 32-byte header som inneholder et 4-byte magisk nummer (0x377f0682 for «little-endian» kontrollsummer, 0x377f0683 for «big-endian»), salt-verdier og en kumulativ kontrollsum. Selve innholdet består av rammer: en 24-byte ramme-header pluss én full databaseside per ramme. Salt-verdier i headeren ugyldiggjør gamle rammer etter et sjekkpunkt, noe som forhindrer utilsiktet gjentakelse.
Bruk av DB-WAL-filer
Håndtering av .db-wal-logger er fullstendig automatisert av SQLite-motoren. En tilhørende .db-shm-fil (delt minneindeks) er alltid til stede sammen med WAL-filen mens databasen er åpen. .db-wal-filen forsvinner automatisk når alle endringer er sjekkpunktet - standardterskelen for wal_autocheckpoint er 1000 sider. Den underliggende WAL-mekanismen er mye brukt på mobile enheter; databaser i Android- og iOS-apper opererer ofte i WAL-modus for forbedret samtidighet og skriveytelse.
Sikkerhet og trygghet
RISIKO: LOWEn .db-wal består av inerte data, ikke kjørbar kode, så den kan ikke kjøre av seg selv. De reelle risikoene er operasjonelle, ikke skadevare: (1) sletting eller tap av -wal-filen mens databasen er åpen, eller etter et krasj, forkaster de nyeste bekreftede transaksjonene - ta sikkerhetskopi av -db, -wal og -shm sammen; (2) WAL-filen til en app-database kan inneholde sensitive data som ennå ikke er sjekkpunktet (meldinger, tokens, historikk), så behandle den som konfidensiell. Hvis foreldredatabasen er kryptert (SQLCipher/SEE), er -wal-filen også kryptert.
Formatdetaljer
i et nøtteskallProgrammer som åpner DB-WAL-filer
Tekniske detaljer
dyp spesifikasjon| Magic bytes | 0x377f0682 ved offset 0 (little-endian kontrollsummer) eller 0x377f0683 (big-endian kontrollsummer) |
| Header-størrelse | 32 byte som inneholder magic, filformatversjon, sidestørrelse, sjekkpunktsekvens, salt-par og kontrollsum |
| Rammestruktur | 24-byte ramme-header + én full databaseside per ramme |
| Sidestørrelse | Samsvarer med sidestørrelsen til den overordnede SQLite-databasen (vanligvis 4096 byte) |
| Kontrollsum | Kumulativ 8-byte kontrollsum (to 32-bit ord) i hver ramme-header og i WAL-headeren |
| Salt-ugyldiggjøring | To 32-bit salt-verdier randomiseres etter hvert sjekkpunkt, noe som ugyldiggjør eventuelle gamle rammer |
| Tilleggsfil | Alltid paret med en .db-shm-fil (delt minneindeks) mens databasen er åpen |
| Navnekonvensjon | Databasens filnavn med -wal lagt til (f.eks. mydata.db-wal) |
| Aktivering | Opprettes kun når databasen er satt til WAL-modus (PRAGMA journal_mode=WAL) |
| Auto-sjekkpunkt | Standard wal_autocheckpoint på 1000 sider begrenser maksimal WAL-vekst før sjekkpunktkjøring |
| Felt for formatversjon | WAL-headeren koder SQLite-bibliotekversjonen som 3007000 (SQLite 3.7.0, juli 2010) |
| Kryptering | Ingen som standard; kryptert når databasen bruker SEE- eller SQLCipher-utvidelser |
| Utgitt | SQLite 3.7.0, July 2010 (WAL journaling mode) |
| Siste versjon | WAL file format magic 0x377f0682 (little-endian) / 0x377f0683 (big-endian) |
| Åpen standard | Ja · royalty-fri |
| Spesifikasjon | www.sqlite.org |
DB-WAL-konverteringer
Spørsmål og svar fra fellesskapet
spurt av brukereIngen spørsmål ennå - vær den første til å spørre om DB-WAL-filer.