Что такое формат файла DB-JOURNAL?
Файлы с расширением .db-journal содержат образы страниц, необходимые для восстановления базы данных SQLite в случае сбоя транзакции. Это временные файлы, создаваемые SQLite в том же каталоге, где хранится база данных. Они не должны быть видны после завершения транзакции, так как SQLite автоматически удаляет их при выполнении команд COMMIT или ROLLBACK.
Благодаря файлам журнала отката транзакций с расширением .db-journal можно обеспечить атомарность транзакций в базе данных. Приложение, работающее с данными базы данных, которое аварийно завершается в середине транзакции, не оставит операции незавершенными - они будут возвращены в состояние, предшествующее началу транзакции. Файл .db-journal присутствует на диске:
- во время выполнения транзакции записи (режим журнала DELETE, установленный в SQLite по умолчанию),
- когда транзакция была прервана сбоем - до тех пор, пока следующее соединение не откроет базу данных,
- когда база данных находится в режиме эксклюзивной блокировки (
PRAGMA locking_mode=EXCLUSIVE) - до тех пор, пока он не будет выключен.
SQLite может использовать несколько различных временных вспомогательных файлов для обеспечения согласованности и безопасности операций с базой данных. .db-journal - это классический журнал отката; .db-wal и .db-shm выполняют аналогичную роль в более новом режиме WAL (Write-Ahead Log).
Именование файлов .db-journal
Файл журнала именуется путем добавления суффикса -journal к полному имени файла базы данных. Например, если база данных сохранена как baza.db, временный файл будет называться baza.db-journal и храниться в том же каталоге. Временные файлы обычно не видны пользователям. В случае сбоя или отключения питания журнал остается в каталоге до следующего открытия базы данных - тогда SQLite обнаруживает «горячий журнал» (hot journal), воспроизводит сохраненные образы страниц для восстановления состояния до транзакции и автоматически удаляет журнал.
Никогда не удаляйте файл .db-journal, пока выполняется транзакция записи, так как это приведет к повреждению базы данных. Наличие файла .db-journal после корректного завершения работы почти всегда указывает на предшествующий сбой; SQLite безопасно выполнит восстановление при следующем открытии. В режиме WAL (PRAGMA journal_mode=WAL), представленном в SQLite 3.7.0 (июль 2010 г.), файл .db-journal не используется вовсе - его роль берет на себя файл .db-wal. Большинство баз данных современных приложений перешли на режим WAL для улучшения параллельного чтения.
Безопасность и защита
РИСК: LOWНе является исполняемым; содержит бинарные данные для восстановления после сбоев. Удаление -journal во время записи в базу данных приведет к ее повреждению - это основной операционный риск. Журналы, оставшиеся после сбоев, можно безопасно оставлять до тех пор, пока SQLite не восстановит их автоматически. Файл -journal может содержать конфиденциальные незафиксированные данные из прерванной транзакции (частичные записи сообщений, учетные данные и т. д.); относитесь к нему с той же степенью конфиденциальности, что и к основной базе данных. Не открывайте и не распространяйте -journal отдельно от родительской базы данных.
Детали формата
в двух словахПрограммы, открывающие файлы DB-JOURNAL
Технические подробности
глубокая спецификация| Тип формата | Двоичный временный журнал отката транзакций (вспомогательный файл SQLite) |
| Магические байты | 8-байтовый заголовок: 0xD9 0xD5 0x05 0xF9 0x20 0xA1 0x63 0xD7 (горячий/постоянный журнал) |
| Порядок байтов | Big-endian (поля заголовка журнала хранятся в сетевом порядке байтов) |
| Размер заголовка журнала | 28 байт (поля количества страниц, случайного числа nonce, размера сектора, размера страницы) |
| Кодировка | Бинарная - хранит дословные образы страниц базы данных SQLite 3, скопированные до модификации |
| Контрольная сумма страницы | Два 32-битных целых числа, вычисляемых на основе nonce и данных страницы; несоответствие сигнализирует об устаревшем или неполном журнале |
| Типичный размер файла | От 0 байт до сотен МБ в зависимости от того, сколько страниц затронула прерванная транзакция |
| Режим журнала | Используется только в режиме журнала DELETE (по умолчанию в SQLite); не создается в режиме WAL |
| Соглашение об именовании | Путь к основной базе данных с добавлением -journal (например, mydata.db → mydata.db-journal) |
| Механизм восстановления | SQLite обнаруживает горячий журнал при открытии соединения, воспроизводит образы страниц для восстановления состояния до транзакции, затем удаляет журнал |
| Замена на WAL | Режим WAL (.db-wal + .db-shm), представленный в SQLite 3.7.0 (июль 2010 г.), предпочтителен для параллельных нагрузок и не использует файл .db-journal |
| Выпущен | SQLite 1.0, 2000 (rollback journal is the original journaling mechanism) |
| Последняя версия | SQLite 3.x current - format unchanged since early SQLite 3; superseded in practice by WAL (-wal) |
| Открыть стандартное | Да · без роялти |
| Спецификация | www.sqlite.org |
Конвертации DB-JOURNAL
Вопросы и ответы сообщества
спрошено пользователямиВопросов пока нет - станьте первым, кто спросит о файлах DB-JOURNAL.