Hvad er DB-WAL-filformatet?
.db-wal filer bruges af SQLite-databasemotoren (siden version 3.7.0, udgivet juli 2010) i WAL (Write-Ahead Logging) journaliseringstilstand.
Indhold af DB-WAL filer
Filer med filtypen .db-wal indeholder write-ahead logdata for en tilhørende SQLite database. Sådanne filer oprettes og bruges, mens en database er åben og aktivt ændres. En .db-wal fil gemmer bekræftede databaseændringer - komplette databasesider - som endnu ikke er blevet skrevet («checkpointed») tilbage til den primære .db fil. Denne write-ahead-metode er hurtigere end direkte at ændre databasesider på stedet og sikrer holdbarhed: i tilfælde af et pludseligt strømsvigt eller systemnedbrud kan SQLite genafspille WAL-filen for at gendanne alle bekræftede transaktioner.
Hver .db-wal fil begynder med en 32-byte header, der indeholder et 4-byte magisk nummer (0x377f0682 for little-endian kontrolsummer, 0x377f0683 for big-endian), salt-værdier og en kumulativ kontrolsum. Selve indholdet består af rammer: en 24-byte ramme-header plus én fuld databaseside hver. Salt-værdierne i headeren ugyldiggør forældede rammer efter et checkpoint, hvilket forhindrer utilsigtede genafspilninger.
Brug af DB-WAL filer
.db-wal logstyring er fuldt automatiseret af SQLite-motoren. En ledsagende .db-shm fil (shared-memory index) er altid til stede sammen med WAL-filen, mens databasen er åben. .db-wal filen forsvinder automatisk, når alle ændringer er checkpointet - standardtærsklen for wal_autocheckpoint er 1000 sider. Den underliggende WAL-mekanisme er meget udbredt på mobile enheder; databaser i Android- og iOS-apps kører ofte i WAL-tilstand for forbedret samtidighed og skriveydelse.
Sikkerhed og tryghed
RISIKO: LOWEn .db-wal er inerte data, ikke eksekverbar kode, så den kan ikke køre af sig selv. De reelle risici er operationelle, ikke malware: (1) sletning eller tab af -wal-filen, mens databasen er åben eller efter et nedbrud, kasserer de nyeste bekræftede transaktioner - tag backup af -db, -wal og -shm sammen; (2) WAL-filen i en app-database kan indeholde følsomme data, der endnu ikke er checkpointet (beskeder, tokens, historik), så behandl den som fortrolig. Hvis den overordnede database er krypteret (SQLCipher/SEE), er -wal-filen også krypteret.
Formatdetaljer
kort fortaltProgrammer der åbner DB-WAL-filer
Tekniske detaljer
dyb specifikation| Magic bytes | 0x377f0682 ved offset 0 (little-endian kontrolsummer) eller 0x377f0683 (big-endian kontrolsummer) |
| Header-størrelse | 32 bytes indeholdende magic, filformat-version, sidestørrelse, checkpoint-sekvens, salt-par og kontrolsum |
| Rammestruktur | 24-byte ramme-header + én fuld databaseside pr. ramme |
| Sidestørrelse | Matcher sidestørrelsen på den overordnede SQLite-database (typisk 4096 bytes) |
| Kontrolsum | Kumulativ 8-byte kontrolsum (to 32-bit ord) i hver ramme-header og i WAL-headeren |
| Salt-ugyldiggørelse | To 32-bit salt-værdier randomiseres efter hvert checkpoint, hvilket ugyldiggør eventuelle forældede rammer |
| Ledsagerfil | Altid parret med en .db-shm (shared-memory index) fil, mens databasen er åben |
| Navngivningskonvention | Database-filnavn med -wal tilføjet (f.eks. mydata.db-wal) |
| Aktivering | Oprettes kun, når databasen er indstillet til WAL-tilstand (PRAGMA journal_mode=WAL) |
| Auto-checkpoint | Standard wal_autocheckpoint ved 1000 sider begrænser maksimal WAL-vækst før checkpointing |
| Format-versionsfelt | WAL-header koder SQLite-biblioteksversionen som 3007000 (SQLite 3.7.0, juli 2010) |
| Kryptering | Ingen som standard; krypteret når databasen bruger SEE- eller SQLCipher-udvidelse |
| Udgivet | SQLite 3.7.0, July 2010 (WAL journaling mode) |
| Seneste version | WAL file format magic 0x377f0682 (little-endian) / 0x377f0683 (big-endian) |
| Åben standard | Ja · royaltyfri |
| Specifikation | www.sqlite.org |
DB-WAL-konverteringer
Fællesskabets Q&A
spurgt af brugereIngen spørgsmål endnu - vær den første til at spørge om DB-WAL-filer.