web-dev-qa-db-ja.com

SQLServerログファイルのサイズを縮小するにはどうすればよいですか

データベースのldfファイルのサイズを縮小する方法がわかりません。

DBAは、backup log dbname with truncate_onlyを使用する必要があると言っています

SQLクエリアナライザで正しく実行されたように見えますが、ldfファイルはまだ2Gbを超えています。

**いくつかのコメントと以下のいくつかの回答に基づく明確化***問題の特定のデータベースは、私のラップトップにあるデータベースであり、開発プロセスのみに使用しています。ログファイルは、ディスクがいっぱいになるように見えるところまで成長していました。生産上のリスクはありません。私が尋ねた質問の方法と私が受け入れた回答は、実稼働環境では危険であることを理解しています。*

10
Ron Tuffin

ああ、ホラー!ログファイルを縮小するように人々に言うのはやめてください!

このような状況に陥った場合は、次のいずれかのケースが発生する可能性が非常に高くなります。

  1. データベースは完全復旧モードであり、実際には単純モードである必要があります
  2. データベースは完全復旧モードであり、定期的なログバックアップを行う必要があります
  3. データベースが完全復旧モードであり、ログバックアップが何らかの理由で失敗している
  4. ログファイルを巨大なサイズにまで膨らませている巨大なトランザクションを実行しています

これらのそれぞれの答えは次のとおりです。

(1)の場合、データベースをシンプルモードに切り替えます
(2)の場合、定期的なログバックアップをスケジュールします
(3)の場合、スケジュールされたログのバックアップを修正します
(4)の場合は、それを行わないでください:)代わりに、より小さなバッチで作業を行ってください。

これらのうちどれも(非推奨)「truncate_onlyを使用したバックアップログdbname」を使用する必要があることに注意してください。

代わりに、上記の方法のいずれかを使用してログファイルをclear実行したら、(次は空の)ログを縮小します。

DBCC SHRINKFILE ('log logical name', 2000)

常に適切な最終サイズを指定してください。そうしないと、ほぼ0に縮小され、次に必要になったときに、成長するのに時間がかかることになります。

11
BradC

「truncate_onlyを使用したバックアップ」を実行した後、次のコマンドを発行して縮小する必要があります

dbcc SHRINKFILE (logfilename,shrink_tosize)

例えば

dbcc SHRINKFILE (mydatabase_Log,512)
4
Mani

上記で作成したスクリプトは、ログの内容に再利用のマークを付けます。そのスクリプトに従ってください:

USE <database>;

DBCC SHRINKFILE (<log logical file name>)

それはあなたのためにそれを縮小します。

3
Brian Knight