DB-JOURNAL ファイル形式とは?
拡張子 .db-journal を持つファイルには、トランザクション失敗時に SQLite データベースを復旧するために必要なページイメージが含まれています。これらは、データベースが保存されているのと同じディレクトリに SQLite によって作成される一時ファイルです。トランザクションが完了すると、SQLite は COMMIT または ROLLBACK 時にこれらを自動的に削除するため、通常は見えません。
拡張子 .db-journal を持つトランザクションロールバックジャーナルファイルのおかげで、データベースにおけるトランザクションの原子性を保証することが可能です。 トランザクションの途中でクラッシュしたデータベースデータを操作するアプリケーションは、操作を不完全なままにすることはありません。それらはトランザクション開始前の状態に戻されます。.db-journal ファイルは、以下の場合にディスク上に存在します:
- 書き込みトランザクションの実行中(SQLite のデフォルトである DELETE ジャーナルモード)、
- クラッシュによってトランザクションが中断されたとき(次の接続がデータベースを開くまで)、
- データベースが排他的ロックモード(
PRAGMA locking_mode=EXCLUSIVE)のとき(オフになるまで)。
SQLite は、データベース操作の整合性とセキュリティを確保するために、いくつかの異なる一時的なサイドカーファイルを使用する場合があります。.db-journal は古典的なロールバックジャーナルです。.db-wal と .db-shm は、より新しい WAL(Write-Ahead Log)モードにおいて同等の役割を果たします。
.db-journal ファイルの命名規則
ジャーナルファイルは、完全なデータベースファイル名に -journal を追加して命名されます。例えば、データベースが baza.db として保存されている場合、一時ファイルは baza.db-journal という名前になり、同じディレクトリに保存されます。一時ファイルは通常、ユーザーには見えません。クラッシュや停電が発生した場合、次にデータベースが開かれるまでジャーナルはディレクトリに残ります。その際、SQLite は «ホットジャーナル» を検出し、保存されたページイメージを再生してトランザクション前の状態を復元し、ジャーナルを自動的に削除します。
書き込みトランザクションの進行中に .db-journal ファイルを削除してはいけません。 削除するとデータベースが破損します。正常なシャットダウン後に .db-journal が残っている場合は、ほぼ間違いなく以前のクラッシュを示しています。SQLite は次回のオープン時に安全にリカバリを処理します。SQLite 3.7.0(2010年7月)で導入された WAL モード(PRAGMA journal_mode=WAL)では、.db-journal ファイルは一切使用されず、.db-wal ファイルがその役割を担います。最新のアプリケーションデータベースのほとんどは、読み取りの並行性を向上させるために WAL モードに切り替わっています。
セキュリティと安全性
リスク: LOW実行可能ファイルではありません。バイナリのクラッシュリカバリデータです。データベースへの書き込み中に -journal を削除すると、データベースが破損します。これが主な運用上のリスクです。クラッシュによって残されたジャーナルは、SQLite が自動復旧するまで放置しても安全です。-journal には、中断されたトランザクションからの機密性の高い未コミットデータ(メッセージや資格情報の部分的な書き込みなど)が含まれている可能性があるため、メインデータベースと同様の機密性を持って扱ってください。親データベースなしで -journal を単独で開いたり配布したりしないでください。
形式の詳細
概要DB-JOURNAL ファイルを開くプログラム
技術的詳細
詳細仕様| フォーマットタイプ | バイナリ一時トランザクションロールバックジャーナル(SQLite サイドカーファイル) |
| マジックバイト | 8バイトヘッダー: 0xD9 0xD5 0x05 0xF9 0x20 0xA1 0x63 0xD7(ホット/永続ジャーナル) |
| バイト順序 | ビッグエンディアン(ジャーナルヘッダーフィールドはネットワークバイト順で保存) |
| ジャーナルヘッダーサイズ | 28バイト(ページ数、ランダムナンス、セクタサイズ、ページサイズフィールド) |
| エンコーディング | バイナリ - 変更前にコピーされた SQLite 3 データベースページイメージをそのまま保存 |
| ページごとのチェックサム | ナンスとページデータから計算された 2 つの 32 ビット整数。不一致は古い、または不完全なジャーナルであることを示す |
| 一般的なファイルサイズ | 中断されたトランザクションが触れたページ数に応じて 0 バイトから数百 MB |
| ジャーナルモード | DELETE ジャーナルモード(SQLite のデフォルト)でのみ使用。WAL モードでは作成されない |
| 命名規則 | メインデータベースのパスに -journal を付加(例: mydata.db → mydata.db-journal) |
| リカバリメカニズム | SQLite は接続オープン時にホットジャーナルを検出し、ページイメージを再生してトランザクション前の状態を復元し、ジャーナルを削除する |
| WAL による代替 | SQLite 3.7.0(2010年7月)で導入された WAL モード(.db-wal + .db-shm)は、並行ワークロードに推奨され、.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 の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。DB-JOURNAL ファイルについて最初の質問をしてみましょう。