Что такое формат файла DB-WAL?
Файлы .db-wal используются движком базы данных SQLite (начиная с версии 3.7.0, выпущенной в июле 2010 года) в режиме журналирования WAL (Write-Ahead Logging).
Содержимое файлов DB-WAL
Файлы с расширением .db-wal содержат данные журнала опережающей записи для парной базы данных SQLite. Такие файлы создаются и используются, пока база данных открыта и активно изменяется. Файл .db-wal хранит подтвержденные изменения базы данных - полные страницы базы данных - которые еще не были записаны («зафиксированы» или checkpointed) обратно в основной файл .db. Этот подход с опережающей записью быстрее, чем прямое изменение страниц базы данных на месте, и обеспечивает надежность: в случае внезапного отключения питания или сбоя системы SQLite может воспроизвести WAL для восстановления всех подтвержденных транзакций.
Каждый файл .db-wal начинается с 32-байтового заголовка, содержащего 4-байтовое магическое число (0x377f0682 для контрольных сумм little-endian, 0x377f0683 для big-endian), значения соли (salt) и кумулятивную контрольную сумму. Тело состоит из кадров (frames): 24-байтовый заголовок кадра плюс одна полная страница базы данных в каждом. Значения соли в заголовке аннулируют устаревшие кадры после контрольной точки, предотвращая случайные повторы.
Использование файлов DB-WAL
Управление журналом .db-wal полностью автоматизировано движком SQLite. Сопутствующий файл .db-shm (индекс разделяемой памяти) всегда присутствует рядом с WAL, пока база данных открыта. Файл .db-wal автоматически исчезает, как только все изменения проходят контрольную точку - по умолчанию порог wal_autocheckpoint составляет 1000 страниц. Базовый механизм WAL широко используется на мобильных устройствах; базы данных в приложениях Android и iOS часто работают в режиме WAL для улучшения параллелизма и производительности записи.
Безопасность и защита
РИСК: LOWФайл .db-wal содержит инертные данные, а не исполняемый код, поэтому он не может запуститься сам по себе. Реальные риски носят операционный характер, а не вредоносный: (1) удаление или потеря -wal при открытой базе данных или после сбоя приводит к отбрасыванию новейших подтвержденных транзакций - делайте резервные копии -db, -wal и -shm вместе; (2) WAL базы данных приложения может содержать конфиденциальные, еще не перенесенные данные (сообщения, токены, историю), поэтому относитесь к нему как к конфиденциальному. Если родительская база данных зашифрована (SQLCipher/SEE), -wal также зашифрован.
Детали формата
в двух словахПрограммы, открывающие файлы DB-WAL
Технические подробности
глубокая спецификация| Магические байты | 0x377f0682 по смещению 0 (контрольные суммы little-endian) или 0x377f0683 (big-endian) |
| Размер заголовка | 32 байта, содержащие магическое число, версию формата файла, размер страницы, последовательность контрольных точек, пару соли и контрольную сумму |
| Структура кадра | 24-байтовый заголовок кадра + одна полная страница базы данных на кадр |
| Размер страницы | Соответствует размеру страницы родительской базы данных SQLite (обычно 4096 байт) |
| Контрольная сумма | Кумулятивная 8-байтовая контрольная сумма (два 32-битных слова) в каждом заголовке кадра и в заголовке WAL |
| Аннулирование солью | Два 32-битных значения соли рандомизируются после каждой контрольной точки, аннулируя любые устаревшие кадры |
| Сопутствующий файл | Всегда в паре с файлом .db-shm (индекс разделяемой памяти), пока база данных открыта |
| Соглашение об именовании | Имя файла базы данных с добавлением -wal (например, mydata.db-wal) |
| Активация | Создается только тогда, когда база данных переведена в режим WAL (PRAGMA journal_mode=WAL) |
| Автоматическая контрольная точка | Значение wal_autocheckpoint по умолчанию в 1000 страниц ограничивает максимальный рост WAL до сброса данных |
| Поле версии формата | Заголовок WAL кодирует версию библиотеки SQLite как 3007000 (SQLite 3.7.0, июль 2010) |
| Шифрование | Отсутствует по умолчанию; зашифровано, если база данных использует расширение SEE или SQLCipher |
| Выпущен | SQLite 3.7.0, July 2010 (WAL journaling mode) |
| Последняя версия | WAL file format magic 0x377f0682 (little-endian) / 0x377f0683 (big-endian) |
| Открыть стандартное | Да · без роялти |
| Спецификация | www.sqlite.org |
Конвертации DB-WAL
Вопросы и ответы сообщества
спрошено пользователямиВопросов пока нет - станьте первым, кто спросит о файлах DB-WAL.