突然SQLServer2000がインストールされているサーバのディスク容量がパンク!
いつの間にやら空き容量が100MB以下になってます。
先月までは200GBくらい空き容量があったはずなのに、などと考えながらサイズの大きいファイルを探してみると。
SQLサーバ配下にある拡張子「.ldf」のファイルが350GBになってました
調べてみると、この「ldf」というファイル、トランザクションログを記録するためのファイルのようです。
トランザクションログは、データの復旧に使われるもので、障害が発生した時点の状態にデータを復旧させることができます。他にも様々なことに使われるのですが、その辺はSQLServerの公式サイトで確認してください。
一番問題なのは、標準設定のまま使用していると、自動拡張され続け、最終的に今回のように容量上限まで達してしまうようです。
では、解決策ですが、自分は以下の3つの処理で無事解決に至りました(^^♪
- トランザクションの削除
- トランザクションログファイルの圧縮
- ログサイズの上限を設定
今回の環境はSQLServer2000でのことなので、バージョンにより実行するコマンドも変わるかもしれません。
その辺はご了承ください。
トランザクションの削除
SQL クエリアナライザを起動し、以下のコマンドを実行します。
例:データベース名が「TEST_DB」の場合
1 |
BACKUP LOG TEST_DB TO DISK = ‘nul’ |
この処理ではファイルサイズは変化しません。ファイルの中のデータを削除するだけです。
トランザクションログファイルの圧縮
SQL クエリアナライザを起動し、以下のコマンドを実行します。
例:データベース名が「TEST_DB」の場合
1 2 |
USE TEST_DB SELECT * FROM dbo.sysfiles |
表示結果から、「filename」列に物理ファイルパスが格納されていることがわかると思います。
値を確認し、拡張子「.ldf」の物理ファイルパスが格納されている行の「name」列の値をコピーします。
続けて以下のコマンドを実行します。
1 |
DBCC SHRINKFILE( name列の値 , 20000 ) |
パラメータの2番目は、ファイルサイズ(MB)を指定します。
経験上、1回で指定のサイズに変わることはないです。
上記コマンドを複数回実行してみてください。
ログサイズの上限を設定
Enterprise Managerを起動します。
該当するデータベースを右クリックして「プロパティ」を選択します。
「トランザクション」タブを選択し、「ファイルの自動拡張」のチェックを外します。
割り当てた領域(MB)に任意の数字を入力してください。
この設定を行うことで、ログファイルのサイズが上限を超えずに、循環ログとして運用されます。