Tuesday, March 17, 2009

Truncate and Shrink on SQL Server 2005

本番環境はバックアップをスケジュールしてあるので、定期的にLogファイルもShrinkしてくれてファイルサイズの問題は無いのだが、テスト環境ではバックアップなんぞはしてないため、Logファイルが日々肥大化。放置した結果、勿論、ドライブの空き容量を食い尽くすので、ある日突然、簡単なDML発行時に、「Logフル」のメッセージで気付くが時既に遅し。マニュアルでのShrinkは最初にバックアップしないといけない為、その分の空き容量がいるが、もう既にLogファイルに占領され空きは無し。そんな時にはこのスクリプト。

MS SQL shrink log files for all databases

カーソルを使ってLogファイル名を取得し、DBCC SHRINKFILE で BACKUP LOG [DB] WITH TRUNCATE_ONLY を挟み込み、最後にこの動的SQL @ssql を sp_msforeachdb に渡すと、ストアドが全DB名を順に?に渡すので、全DBに対してLogファイルのShrinkが出来ると言う内容。頭のところでSystemDBを対象外にしているので、ユーザーDBのみ。試したところ、問題なく完了。パフォーマンスも問題なし。便利なスクリプトです。

sp_msforeachdb (MS For Each DB、何故MSなのかは分かりませんが)は何かと使えそうな便利なストアド。

0 comments: