トランザクションログを圧縮する方法 / Transaction Log 削除
データベースを使うとトランザクションログがどんどん増えて行く。
トランザクションログを空にしないといつかはディスクの容量が限界に達してサービスが停止することもある。
トランザクションログを空にするにはトランザクションログをバックアップすれば空になる。
だが、既に大きくなっていまったトランザクションログファイルのサイズは元に戻らない。
大量のデータを処理してトランザクションログのサイズが1GBになっているとしよう。
トランザクションログをバックアップしてログファイルの内容を空にしたとしよう。
だが、トランザクションログファイルのサイズは1GBになっているとことだ。
その空になったファイルを圧縮して小さくする必要がある。
では、データベースのトランザクションログがどのぐらい使用されているか確認をしたい!!!
DBCC SQLPERF(LOGSPACE)
上記のSQLを実行するとデータベースごとにトランザクションログの使用量が確認できる。
まず、どうやって実行すればいいのか下記のSQLを見よう。
BACKUP LOG [データベース名] WITH TRUNCATE_ONLY
DBCC SHRINKFILE ('[論理ファイル名]', [圧縮サイズ(単位:MB)])
1行目がログをバックアップする。
2行目は空になったトランザクションログファイルを圧縮する。
論理ファイル名を分かりません!!!という方は下記のSQLを参考。
EXEC sp_helpfile
論理ファイル名を確認したいデータベースから上記のSQLを実行すると
下記のような結果がでる。
実行結果
ちなみに、私は「test」というデータベースを作成してテストしている。
では、「test」データベースからログファイルの物理ファイル名「test_log」ファイルのサイズを1MBに変更しよう。
BACKUP LOG test TO DISK = N'NUL'
DBCC SHRINKFILE ('test_log', 1)
これを実行すると実行結果が下記のとおりだ。
「size」が1024KBになっている。
もし、上記のSQLを実行した時に下記のエラーが発生した場合、
メッセージ 4214、レベル 16、状態 1、行 1
現在、データベースのバックアップが存在しないので、BACKUP LOG を実行できません。
メッセージ 3013、レベル 16、状態 1、行 1
BACKUP LOG が異常終了しています。
これはまだ該当データベースのフールパックアップをしていないからだ。
BACKUP DATABASE test TO DISK = N'NUL'
このSQLを実行した後に再度上記のSQLを実行すれば正常に処理される。
これでトランザクションログファイルの圧縮作業は終わり。