web-dev-qa-db-ja.com

SQL 2012トランザクションログのバックアップでログが切り捨てられない

私はDB管理の初心者なので、我慢してください。非常に大きなトランザクションログ(19GB)を持つ小さなDB500MBがあります。これを「完全復旧」モードのままにしておきたいので、「シンプル」復旧モードを提案しないでください。

トランザクションログのサイズを削減する方法について調査しており、提案を実装しようとしていますが、ログサイズは変更されません。

まず、私が行うことは次のとおりです。メンテナンスプラン内のすべてのデータベースをバックアップする毎日のバックアップタスクがあります。これは「フル」バックアップタイプであり、うまく機能しているようです。 DB自体のサイズと同じように毎日1つのファイルがバックアップされているのがわかります。

完全バックアップができたので、「トランザクションログの切り捨て」オプションを使用した手動の「トランザクションログ」タイプのバックアップの実行に進みました。

バックアップは数秒で完了し、数メガバイトのサイズのファイルが作成されますが、トランザクションログのサイズは変わりません。

私は何が間違っているのですか?

1
user2629636

トランザクションログのバックアップは、既存のログファイルにさらにトランザクション用のスペースを確保しているという意味で、ログを切り捨てています。ログファイルを縮小する場合は、SSMSの「ファイルの縮小」オプションを選択する必要があります。データベースを右クリックして、そのオプションを見つけます。
MS SQL Server Management Studio shrink filesMS SQL Server Management Studio shrink log file データベースのトランザクション数とログのバックアップ頻度に基づいて、縮小するファイルサイズが十分に大きくない場合、ファイルは再び大きくなります。これを防ぐために、ログバックアップをより頻繁に実行する必要がある場合があります。

トランザクションログのバックアップをまったく実行していないようです(手動で実行した場合を除く)。もしそうなら、これがあなたのトランザクションログが成長している理由であるだけでなく、とにかく完全な回復の利益を得ていません。定期的なトランザクションログのバックアップをスケジュールしてください。 (1時間ごとが良いスタートです。)

4

わかりました、最初に理解することはなぜログファイルがそれがあるサイズであるかです。あなたはデータが500MBだと言いますか?これは、ログファイルと比較して非常に小さいデータファイルです。それが本当であるならば、ログはそれが理由のためであるサイズです。

それでは、なぜDBにデータを実行しているのかを理解する必要がありますか?データを実行し、インデックスなどを再構築し、大規模なトランザクションを実行しているETL/DTSプロセスはありますか?コミットされていないトランザクションがないことを確認しましたか? (@@ trancountを選択)

Log_reuse_waitとlog_reuse_wait_descを確認することで、ログの現在のステータスを確認できます。

SELECT [log_reuse_wait_desc] FROM [master]。[sys]。[databases] WHERE [name] = N'Company ';

ログの非アクティブな部分は、そのすべてのログレコードがログバックアップにキャプチャされるまで切り捨てることができません。これは、連続したログシーケンス番号(LSN)の一連のログレコードをログチェーンに維持するために必要です。次の条件が存在する場合、トランザクションログをバックアップすると、ログは切り捨てられます。

1.ログが最後にバックアップされてからチェックポイントが発生しました。チェックポイントは不可欠ですが、完全復旧モデルまたは一括ログ復旧モデルでログを切り捨てるには十分ではありません。チェックポイントの後、ログは少なくとも次のトランザクションログのバックアップまでそのまま残ります。

2.ログトランザクションを妨げるその他の要因はありません。

通常、定期的なバックアップでは、ログスペースは将来の使用のために定期的に解放されます。ただし、長時間実行されるトランザクションなどのさまざまな要因により、ログの切り捨てが一時的に防止される場合があります。

BACKUP LOGステートメントはWITH COPY_ONLYを指定していません。

ソース: https://technet.Microsoft.com/en-us/library/ms189085(v = sql.105).aspx

ログファイルをそのサイズにする必要があり、それを縮小すると、ログは再び大きくなるだけであり、データベースがログを書き込んでいて、ファイルの即時初期化が有効になっていない限り、ファイルを大きくする必要があるため、それ自体がコストのかかるプロセスです。 SQLサーバーサービスアカウントの場合、プロセスはファイルが大きくなるのを待ってから書き込みます。GBチャンクの場合は、処理する必要のある大きな問題が発生します。

したがって、データベースのアクティビティを確認する必要があります。たとえば、1日に1つのログバックアップしか実行していない場合、DBのアクティビティには不十分かもしれません。私の組織では、15分ごとから1時間ごとにバックアップを取ります。場合によっては、特定のDbについては5分ごとです。これにより、ログがあまり大きくならないようになります(一部のサーバーではログのサイズが事前に設定されています)。また、タイトなRTO/RPOを実行しています。

joeqwertyが述べているように、リカバリポイントに関してそのボックスにタイトなSLAがない限り、FULLまたはBULK-Loggedで実行する価値がない可能性があります。すべての場合、時間を無駄にします。毎日完全バックアップを実行し、会社はデータの損失を気にせず、それと戦わず、それを処理します。

音声文字変換ポイントの回復ではなく、ログのサイズだけが気になる場合は、ログをバックアップして縮小してから、シンプルに切り替えます。

単純な回復を提案しないとあなたは言いますが、完全な回復で何をしているのかを完全には理解していないと思います。

1
JayBay2279