web-dev-qa-db-ja.com

SQL Serverのトランザクションログが大きすぎます

33 GBのトランザクションログを持つデータベースがあります。これは、データベースが完全復旧モードになっていて、最初のバックアップの前に5年以上使用されていたことが原因です。

次のコマンドでログファイルを切り詰めて縮小したい

Backup log dbname with truncate_only
go
DBCC shrinkfile('logicalfilename',100)

上記のコマンドを実行した後、将来、完全バックアップ1と2の間の時点に復元できますか?

タイムライン

  1. 事前切り捨てバックアップ
  2. 切り詰めて縮小
  3. 将来の完全バックアップ1
  4. 将来の完全バックアップ2

おかげで、

2
gavin

将来の完全バックアップ1と2の間の時点に復元できますか?

はい。あなたが心配しているのはLog Chainです。ログチェーンは完全バックアップから始まります。したがって、future full backup 1新しいログチェーンを開始し、トランザクションログバックアップを使用して、特定の時点に復元できます。

トランザクションログバックアップの使用に関するBOLリファレンス

ログを切り捨てる最初の方法については、 BOL on BACKUP の次の点に注意してください。

BACKUP LOG WITH NO_LOGおよびWITH TRUNCATE_ONLYオプションは廃止されました。完全または一括ログ復旧モデルの復旧を使用していて、データベースからログバックアップチェーンを削除する必要がある場合は、単純復旧モデルに切り替えます。

そして、これは言うまでもないことだと思いますが、私は明示的にします。これと同じ問題が発生しないようにするには、定期的なトランザクションログのバックアップを実行する必要があります。

8
Thomas Stringer

ここでの主な問題は、定期的なログバックアップを行っていないように見えることです。私が最初に行うことは、 SQL Serverの復旧モデル を確実に理解することです。主に、FULLおよびBULKLOGGEDのデータベースでは、定期的なログバックアップを行う必要があります。

ログファイルをクリーンアップするには、まずログバックアップを作成することをお勧めします。

BACKUP LOG foo TO DISK='<backup file location>'

これが完了したら、DBCC SHRINKFILEコマンドを安全に実行して、ログファイルのサイズを適切に変更できます。

最後に、データベースの定期的なログバックアップをスケジュールする必要があります。 メンテナンスプラン または Ola Hallengrenのメンテナンススクリプト のいずれかを使用して、これを実行する多くのツールがあります。また、 Thomas StringerのBOLへのリンク を読んで理解することを強くお勧めします。

6
Mike Fal

私はSQLバックアップを理解するだけで、非常によく似た質問がありました。

特定の時点に復元するには、次のものが必要です。

  • 特定の時点より前の最新完全バックアップ
  • (オプション)完全バックアップ後、ポイントインタイム前の最新差分バックアップ
  • フルバックアップまたは復元元の差分バックアップ以降のすべてのトランザクションログバックアップ

あなたが走るとき

Backup log dbname with truncate_only

ログをバックアップするのではなく、ログを消去します。したがって、実行できる唯一の復元は、完全(または差分)バックアップからの復元です。

Mike Falの回答 はトランザクションログのバックアップを設定する方法を示しています Thomasの回答 はログチェーンを説明していますが、復元するために必要なものを正確に投稿する必要があると感じました先週同じ質問があり、ポイントインタイムリストアを実行するために正確に何が必要かについて非常に混乱していました。

6
Rachel