O que é o formato de ficheiro DB-WAL?
Arquivos .db-wal são usados pelo mecanismo de banco de dados SQLite (desde a versão 3.7.0, lançada em julho de 2010) no modo de journaling WAL (Write-Ahead Logging).
Conteúdo dos arquivos DB-WAL
Arquivos com a extensão .db-wal contêm dados de log de gravação antecipada para um banco de dados SQLite emparelhado. Tais arquivos são criados e usados enquanto um banco de dados está aberto e sendo ativamente modificado. Um arquivo .db-wal armazena alterações de banco de dados confirmadas - páginas inteiras do banco de dados - que ainda não foram gravadas («checkpointed») de volta no arquivo .db principal. Essa abordagem de gravação antecipada é mais rápida do que modificar diretamente as páginas do banco de dados no local e garante a durabilidade: no caso de uma queda repentina de energia ou falha do sistema, o SQLite pode reproduzir o WAL para recuperar todas as transações confirmadas.
Cada arquivo .db-wal começa com um cabeçalho de 32 bytes contendo um número mágico de 4 bytes (0x377f0682 para checksums little-endian, 0x377f0683 para big-endian), valores de salt e um checksum cumulativo. O corpo consiste em quadros: um cabeçalho de quadro de 24 bytes mais uma página inteira do banco de dados cada. Os valores de salt no cabeçalho invalidam quadros obsoletos após um checkpoint, evitando reproduções acidentais.
Usando arquivos DB-WAL
A gestão do log .db-wal é totalmente automatizada pelo mecanismo SQLite. Um arquivo .db-shm complementar (índice de memória compartilhada) está sempre presente ao lado do WAL enquanto o banco de dados está aberto. O arquivo .db-wal desaparece automaticamente assim que todas as alterações passam pelo checkpoint - o limite padrão de wal_autocheckpoint é de 1000 páginas. O mecanismo WAL subjacente é amplamente utilizado em dispositivos móveis; bancos de dados em aplicativos Android e iOS operam frequentemente no modo WAL para melhorar a concorrência e o desempenho de gravação.
Segurança e proteção
RISCO: LOWUm .db-wal consiste em dados inertes, não código executável, portanto não pode ser executado por si só. Os riscos reais são operacionais, não de malware: (1) excluir ou perder o -wal enquanto o banco de dados está aberto, ou após uma falha, descarta as transações confirmadas mais recentes - faça backup do -db, -wal e -shm juntos; (2) o WAL de um banco de dados de aplicativo pode conter dados confidenciais que ainda não passaram pelo checkpoint (mensagens, tokens, histórico), portanto, trate-o como confidencial. Se o banco de dados pai estiver criptografado (SQLCipher/SEE), o -wal também estará criptografado.
Detalhes do formato
em resumoProgramas que abrem arquivos DB-WAL
Detalhes técnicos
especificação profunda| Magic bytes | 0x377f0682 no deslocamento 0 (checksums little-endian) ou 0x377f0683 (checksums big-endian) |
| Tamanho do cabeçalho | 32 bytes contendo magic, versão do formato de arquivo, tamanho da página, sequência de checkpoint, par de salt e checksum |
| Estrutura do quadro | Cabeçalho de quadro de 24 bytes + uma página inteira de banco de dados por quadro |
| Tamanho da página | Corresponde ao tamanho da página do banco de dados SQLite pai (geralmente 4096 bytes) |
| Checksum | Checksum cumulativo de 8 bytes (duas palavras de 32 bits) em cada cabeçalho de quadro e no cabeçalho WAL |
| Invalidação por salt | Dois valores de salt de 32 bits são randomizados após cada checkpoint, invalidando quaisquer quadros obsoletos |
| Arquivo complementar | Sempre emparelhado com um arquivo .db-shm (índice de memória compartilhada) enquanto o banco de dados está aberto |
| Convenção de nomenclatura | Nome do arquivo do banco de dados com -wal anexado (ex: mydata.db-wal) |
| Ativação | Criado apenas quando o banco de dados está definido para o modo WAL (PRAGMA journal_mode=WAL) |
| Auto-checkpoint | O wal_autocheckpoint padrão em 1000 páginas limita o crescimento máximo do WAL antes do checkpoint |
| Campo de versão do formato | O cabeçalho WAL codifica a versão da biblioteca SQLite como 3007000 (SQLite 3.7.0, julho de 2010) |
| Criptografia | Nenhuma por padrão; criptografado quando o banco de dados usa a extensão SEE ou SQLCipher |
| Lançado | SQLite 3.7.0, July 2010 (WAL journaling mode) |
| Versão mais recente | WAL file format magic 0x377f0682 (little-endian) / 0x377f0683 (big-endian) |
| Padrão aberto | Sim · livre de royalties |
| Especificação | www.sqlite.org |
Conversões de DB-WAL
Perguntas e Respostas da Comunidade
perguntado por usuáriosAinda não há perguntas - seja o primeiro a perguntar sobre arquivos DB-WAL.