LDF ファイル形式とは?
.ldf ファイルは、変更がディスクに書き込まれる前に、データベースに加えられたすべての変更を記録するために Microsoft SQL Server によって作成される トランザクション ログ ファイル です。これは「ライトアヘッド ロギング(ログ先行書き込み)」戦略を実装しており、SQL Server はまずログ レコードを書き込み、その後に対応する変更をデータ ページに適用します。
すべての .ldf は、プライマリ .mdf データ ファイルのペアとなるコンパニオンとして機能します。正常なログ ファイルがなければデータベースをオンラインにすることはできません。制御された手順以外で .ldf を削除したり紛失したりすると、データベースが復旧不能になる可能性があります。
内部的に、ログは 仮想ログ ファイル (VLF) と呼ばれる、SQL Server が循環的に割り当てて再利用する固定セグメントに分割されています。各ログ レコードには一意の ログ シーケンス番号 (LSN) が付与されます。これはファイル番号、ブロック オフセット、および 512 バイトのログ ブロック内のスロットをエンコードした 10 バイトの値です。エンジンはクラッシュ復旧時にこの LSN チェーンをたどり、コミットされたトランザクションのやり直し(Redo)と不完全なトランザクションの取り消し(Undo)を行います。
.ldf は、以下の重要な SQL Server 機能を支えています:
- クラッシュ復旧 - 予期しないシャットダウン後に実行中のトランザクションを再生またはロールバックする
- ポイントインタイム復元 - 「完全」復旧モデルにおいて、.bak フル バックアップおよび .trn ログ バックアップと組み合わせて使用する
- レプリケーションと変更データ キャプチャ (CDC) - コミットされた変更をログから直接読み取る
この形式は独自のバイナリであり、公開されたマジック バイトはなく、手動で開くことはできません。ApexSQL Log や Redgate SQL Log などのサードパーティ ツールを使用すると、監査やフォレンジック目的でログ レコードをデコードできます。SQL Server 2017 以降、.ldf ファイルは Linux や Docker コンテナ上でも、.ndf セカンダリ データ ファイルと同様にサポートされています。
セキュリティと安全性
リスク: MEDIUMこのファイルはデータであり実行可能ファイルではないため、直接的なマルウェアのリスクはありません。本当の危険は運用面にあります。稼働中または «疑わしい» 状態のデータベースから .ldf を削除したりデタッチしたりすると、データ損失が発生したり、データベースが復旧不能になったりする可能性があります。また、ログなしで(または再構築されたログで)データベースを作成すると、実行中のトランザクションが失われます。.ldf を手動で編集しないでください。ログが巨大な場合は、削除するのではなく、サポートされている方法(ログをバックアップしてから DBCC SHRINKFILE を実行)で圧縮してください。TDE で暗号化されたログを復元するには、データベースの証明書/キーが必要です。
形式の詳細
概要LDF ファイルを開くプログラム
DBCC SQLPERF(LOGSPACE) を使用してログの使用状況を確認できます。.ldf ファイルを直接開くことはありません。 技術的詳細
詳細仕様| エンコーディング | バイナリ、リトルエンディアン |
| コンテナ構造 | 仮想ログ ファイル (VLF) のシーケンス。SQL Server は、ログ スペースが解放されるたびに、循環パターンで VLF を割り当てて再利用します |
| ログ レコード単位 | 512 バイトのログ ブロックにパックされた可変長のログ レコード |
| レコード識別子 | ログ シーケンス番号 (LSN) - ログ ファイル番号、ファイル内のブロック オフセット、およびブロック内のスロット番号をエンコードした 10 バイトの値 |
| 循環再利用 | アクティブな部分が不要になった後(SIMPLE モデルではチェックポイント後、FULL モデルではログ バックアップ後)、ログ スペースは再利用されます |
| 復旧モデルのサポート | SQL Server の復旧モデルによって動作が異なります:SIMPLE(チェックポイントで自動切り捨て)、BULK-LOGGED(一括操作の最小ログ記録)、FULL(ログ バックアップが取得されるまでログが拡張される) |
| ペアとなるデータ ファイル | 常に少なくとも 1 つの `.mdf` プライマリ データ ファイルとペアになります。追加のデータ ファイルには `.ndf` 拡張子が使用されます |
| 最大ファイル サイズ | Windows NTFS/ReFS 上で 1 ログ ファイルあたり最大 2 TB。1 つのデータベースに複数の `.ldf` ファイルを持たせることができ、それぞれにこの制限が適用されます |
| 暗号化 | デフォルトでは未暗号化。データベースで透過的データ暗号化 (TDE) が有効になると、自動的に暗号化されます |
| 圧縮 | `.ldf` 自体は非圧縮で保存されます。`.trn` または `.bak` ファイルに書き込まれるログ バックアップでは、SQL Server のバックアップ圧縮を使用できます |
| チェックサム / 整合性 | データベース レベルで構成可能な、オプションの破損ページ検出およびページ チェックサム。エンジンは復旧のたびに LSN チェーンを検証します |
| 自動拡張 | SQL Server は `.ldf` が一杯になると自動拡張します。拡張増分は固定の MB またはパーセンテージで構成可能です。小さな増分での過度な自動拡張は、VLF の断片化を引き起こし、復旧を遅らせます |
| 内部バージョンのバインド | 形式は SQL Server エンジンのバージョンとデータベースの互換性レベルに関連付けられています。例えば SQL Server 2022 は内部データベース バージョン 904 を使用します |
| OS プラットフォーム サポート | Windows (すべての最新 SQL Server バージョン)、Linux および Docker コンテナ (SQL Server 2017 以降の SQL Server on Linux 経由) |
| MIME タイプ | application/octet-stream (この形式専用に登録された MIME タイプはありません) |
| 直接アクセス | 直接開いたり解析したりすることは想定されていません。SQL Server エンジンのアタッチ、`RESTORE DATABASE` コマンド、または ApexSQL Log や Redgate SQL Log などのサードパーティ製ログ リーダーを通じてアクセスします |
| リリース日 | Microsoft SQL Server (log architecture present since the Sybase-derived 4.x/6.x era, 1990s) |
| 最新バージョン | Format tied to the database compatibility/engine version (e.g. SQL Server 2022, internal db version 904) |
| 仕様書 | learn.microsoft.com |
LDF の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。LDF ファイルについて最初の質問をしてみましょう。
よくある質問
LDF ファイルとは何ですか?
LDF ファイルを開くにはどうすればよいですか?
空き容量を増やすために LDF ファイルを削除してもいいですか?
DBCC SHRINKFILE でファイルを圧縮してください。LDF が見当たりません。それでもデータベースをアタッチできますか?
CREATE DATABASE ... FOR ATTACH_REBUILD_LOG でアタッチ)。ただし、未コミットのトランザクションは失われます。破損しているが必要なログの場合は、適切な復元作業が必要です。