DB-WAL ファイル形式とは?
.db-wal ファイルは、WAL(Write-Ahead Logging)ジャーナルモードの SQLite データベースエンジン(2010年7月リリースのバージョン 3.7.0 以降)によって使用されます。
DB-WAL ファイルの内容
.db-wal 拡張子を持つファイルには、ペアとなる SQLite データベースの先行書き込みログデータが含まれています。これらのファイルは、データベースが開かれ、アクティブに変更されている間に作成・使用されます。.db-wal ファイルは、メインの .db ファイルにまだ書き戻されて(「チェックポイント」されて)いない、コミット済みのデータベース変更(完全なデータベースページ)を保存します。この先行書き込みアプローチは、データベースページを直接その場で変更するよりも高速であり、耐久性を保証します。突然の停電やシステムクラッシュが発生した場合、SQLite は WAL を再生して、すべてのコミット済みトランザクションを回復できます。
各 .db-wal ファイルは、4バイトのマジックナンバー(リトルエンディアンのチェックサムの場合は 0x377f0682、ビッグエンディアンの場合は 0x377f0683)、ソルト値、および累積チェックサムを含む 32 バイトのヘッダーで始まります。ボディはフレームで構成されており、24 バイトのフレームヘッダーと、それぞれ 1 つの完全なデータベースページで構成されています。ヘッダー内のソルト値は、チェックポイント後に古いフレームを無効にし、誤った再生を防止します。
DB-WAL ファイルの使用
.db-wal ログの管理は、SQLite エンジンによって完全に自動化されています。データベースが開いている間は、WAL と並んでコンパニオンファイルである .db-shm(共有メモリインデックス)ファイルが常に存在します。すべての変更がチェックポイントされると、.db-wal ファイルは自動的に消失します。デフォルトの wal_autocheckpoint しきい値は 1000 ページです。基盤となる WAL メカニズムはモバイルデバイスで広く使用されています。Android や iOS アプリのデータベースは、並行性と書き込みパフォーマンスを向上させるために、頻繁に WAL モードで動作しています。
セキュリティと安全性
リスク: LOW.db-wal は不活性なデータであり、実行可能コードではないため、単独で実行されることはありません。本当のリスクはマルウェアではなく運用上のものです。(1) データベースが開いている間、またはクラッシュ後に -wal を削除または紛失すると、最新のコミット済みトランザクションが破棄されます。-db、-wal、-shm は一緒にバックアップしてください。(2) アプリデータベースの WAL には、まだチェックポイントされていない機密データ(メッセージ、トークン、履歴)が含まれている可能性があるため、機密情報として扱ってください。親データベースが暗号化されている場合(SQLCipher/SEE)、-wal も暗号化されます。
形式の詳細
概要DB-WAL ファイルを開くプログラム
技術的詳細
詳細仕様| マジックバイト | オフセット 0 に 0x377f0682(リトルエンディアン・チェックサム)または 0x377f0683(ビッグエンディアン・チェックサム) |
| ヘッダーサイズ | マジック、ファイル形式バージョン、ページサイズ、チェックポイントシーケンス、ソルトペア、およびチェックサムを含む 32 バイト |
| フレーム構造 | 24 バイトのフレームヘッダー + フレームごとに 1 つの完全なデータベースページ |
| ページサイズ | 親 SQLite データベースのページサイズと一致(通常は 4096 バイト) |
| チェックサム | 各フレームヘッダーおよび WAL ヘッダー内の累積 8 バイトチェックサム(2 つの 32 ビットワード) |
| ソルトによる無効化 | 各チェックポイント後に 2 つの 32 ビットソルト値がランダム化され、古いフレームを無効化 |
| コンパニオンファイル | データベースが開いている間は、常に .db-shm(共有メモリインデックス)ファイルとペアになる |
| 命名規則 | データベースファイル名に -wal を付加(例:mydata.db-wal) |
| 有効化 | データベースが WAL モードに設定されている場合にのみ作成される(PRAGMA journal_mode=WAL) |
| 自動チェックポイント | デフォルトの wal_autocheckpoint は 1000 ページで、チェックポイント前の WAL の最大増加を制限 |
| 形式バージョンフィールド | WAL ヘッダーは SQLite ライブラリバージョンを 3007000(SQLite 3.7.0、2010年7月)としてエンコード |
| 暗号化 | デフォルトではなし。データベースが 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 の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。DB-WAL ファイルについて最初の質問をしてみましょう。