web-dev-qa-db-ja.com

SQL Server 2008でログファイルが大きくなるのを防ぐにはどうすればよいですか?

復元直後のアプリケーションでは、新しく作成されたデータベースに対して多くの(> 100,000,000)更新を実行します。したがって、LOGファイルは大幅に増加します。

どうすれば成長を止めることができますか?

注:リカバリモデルをシンプルに設定しても機能しません。

また、この質問は元々ここに投稿されました: https://stackoverflow.com/questions/4400057/how-to-stop-log-file-from-growing-in-sql-server-2008

3
Chicago

回復モデルを単純で、縮小を実行するのに十分な長さに変更してから、回復モデルを元に戻すことはできますか?

何かのようなもの:

alter database <mydb> set recovery simple
go
checkpoint
go
alter database <mydb> set recovery full
go
backup database pubs to disk = 'c:\mydb.bak' with init
go
dbcc shrinkfile (N'mydb_log' , 1)
go

私はそれを http://sql-server-performance.com/Community/forums/p/28345/151682.aspx から借りたことを認めます

そのリンクは次のリンクにもリンクしています: http://madhuottapalam.blogspot.com/2008/05/faq-how-to-truncate-and-shrink.html

2
Yoopergeek

あなたがする必要があるでしょう:

  1. シンプルリカバリモードに切り替えるか、トランザクションログをより頻繁にバックアップします
  2. ループメカニズムを使用して、更新を小さなバッチで適用します。
3
Joe Stefanelli

私が提案したように stackoverflow

あなたがする必要があるでしょう:

  1. シンプルリカバリモードに切り替えるか、トランザクションログをより頻繁にバックアップします
  2. ループメカニズムを使用して、更新を小さなバッチで適用します。
2
Joe Stefanelli

ログバックアップをより頻繁に実行する必要があります。たぶん、それらの更新が行われている間、5分ごとに。

夜間の差分バックアップは、以前に作成された圧倒的な量のログバックアップに依存せず、ポイントインタイムリカバリ機能に関心がない場合に役立つはずです。

1
ozamora

ロギングを制御する唯一の実際の方法は、定期的なSQLバックアップを実行することです。単純なリカバリモデルに移行できない場合は、バックアップ戦略にトランザクションログバックアップの実行を含めて、チェックポイントを設定する必要があります。チェックポイントが設定されると、SQLサーバーはディスク領域の回復を開始できます。

0
NotMe

簡単な答えは-あなたはしません。シンプルなリカバリーモデルは最高です。基本的に、データ書き込みシナリオ全体にはログファイルが必要です(更新をコミットするときにデータベースは書き込まれません)。

0
TomTom

ログファイルのusingからSQLを停止することはできません。これが、SQLの動作方法です。ただし、SQLがファイルを頻繁に再利用するようにすることで、ファイルを小さく保つことができます。これを行う2つの方法:

  1. Dbをシンプルモードに切り替えて、より小さなサイズのバッチを実行します。
  2. データベースをフルモードに保ち、トランザクションログのバックアップを頻繁に実行し、より小さなサイズのバッチを実行します。

シンプルモードへの切り替えが最も簡単です。これができない場合は、非常に頻繁に(10〜15分ごとに?)トランザクションログのバックアップを取ります。

これらの場合の両方では、ではないことを確認する必要がありますすべての更新を1つの巨大なバッチ(UPDATE GIANTTABLE ... with no WHERE clause)で実行します。限られた数の行(たとえば100,000程度)のみを更新するには、UPDATE TOPWHILE、またはカーソルを使用する必要がある場合があります。

0
BradC

頭に浮かんだことの1つは、それらの1億レコードを挿入/更新するために一括更新を利用できるということです。一括更新による最小限のロギングについては、 MSDNで説明 のこの情報を参照してください。

0
NotMe