小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

SqlServer2000でのトランザクションログ切捨てについて

PC上にあるSqlServer2000データベースのデータは、実は拡張子が『.mdf』というファイルに格納されています。このファイルをデータファイルと呼びます。

一方、『.mdf』とペアで『.ldf』というファイルもあります。こちらの『.ldf』は、トランザクションログファイルと呼ばれ、トランザクションの履歴が格納されています。トランザクションログは、ロールバックや障害時のデータ復旧に利用されます。

そして、システムが稼動し始めて、数ヶ月かするとディスク容量がほとんどなくなってしまうことに気がつきます。すると、えらく大きくなったトランザクションログファイルに遭遇することになるのです。

そう、トランザクションログファイルは、復旧モデルがシンプル以外ではディスクのある分、どんどん増え続けるのです。したがって、普段からトランザクションログファイルに対して、容量切捨て必要かの監視が必要なのです。

容量切捨ての解決策としては以下の3つです。

  1. トランザクションログファイルのバックアップを定期的に取る。すると一緒に切捨てられる。
  2. 手動切捨てコマンドを実行する。(BACKUP LOG データベース名 WITH TRUNCATE_ONLY)
  3. 復旧モデルをシンプルにする。(ただし、障害時に完全復旧ができなくなる可能性が大きくなる)

実は、上記を実行しても使用済みエリアを空エリアにするだけで、ディスク空き容量の物理サイズは、変わりません。空エリアを、物理的に削るには、『DBCC SHRINKFILE』コマンドを使用します。