web-dev-qa-db-ja.com

SQLバックアップ、ログファイル、およびログ配布に関するクエリ

サイズが約25MBのMS-SQLサーバーバックアップ.bakファイルがマシンに復元されましたが、ログファイルがそのサイズであったため、10Gbの空きディスク容量が必要でした。これは、ログファイルがバックアウトされていないことを示しています。切り捨てもされません。 (10Gbログファイルはほとんど空でなければならないことに注意してください。そうしないと、.bakファイルは25mbよりもはるかに大きくなります)

このデータベースは、あまり使用されていない(おそらくそれほど重要ではない)データベース用であり、同じサイトには、ログファイルが小さい別のはるかに重要ではるかに大きなデータベース(5 Gbの領域のサイズ)があります。そのデータベースのログファイルがトリミングされていると仮定します。

このサイトはログ配布を使用してメインデータベースを2番目のサーバーにバックアップしていると言われていますが、小さいデータベースもバックアップされているかどうかはわかりません。

したがって、メインデータベースにログ配布のみを使用しているか、メインデータベースのみをバックアップしているのではないかと推測しています。

これはいくつかの質問を提起します

  1. サイトのユーザー/管理者が実行できる、ログ配布を妨害または中断するようなバックアップはありますか?
  2. ログ配布を使用する場合、ログが継続的に増大しないようにするのに十分ですか、それとも(たとえば保守計画を使用して)ログをバックアップする必要がありますか?
  3. これはそれほど重要ではありませんが、ログファイル用に利用可能なスペースよりも多くのスペースを必要とするバックアップを取得した場合、ログファイルなしで、またはソースで問題を修正して新しいものを取得せずに復元する方法はありますか?バックアップ。
3
sgmoore

SQLは、ログのバックアップ後に実際にログのサイズを変更するのではなく、内部メタデータを変更して、ログの再利用可能な部分(仮想ログファイルまたはVLFと呼ばれる)をマークするだけです。このプロセスは、ログの切り捨てと呼ばれます。したがって、空きVLFがない場合、ログファイルは大きくなりますが、SQL Serverに手動で指示しない限り、ログファイルは縮小しません。

データベースのログサイズは10Gbであるため、バックアップを復元すると、実際に使用されている量に関係なく、10Gbのログファイルも作成されます。同じことがすべてのデータファイルにも当てはまります。

' DBCC SHRINKFILE 'コマンドを使用してログファイルを縮小できますが、ログが再び10Gbに拡大しないことが確実でない限り、それを行わないことをお勧めします(拡大するとパフォーマンスに影響があります)ファイル)。長時間実行されるトランザクションまたはデータベースのメンテナンスアクティビティは、多くのトランザクションログを消費する可能性があるため、縮小する前にログが10Gbである理由を調べる価値があります。

3つの質問に答えるには:

ログ配布を妨害または中断する、サイトのユーザー/管理者が実行できるバックアップはありますか?

はい-ログ配布構成外の宛先にログをバックアップすることによってバックアップチェーンを切断し、その結果、バックアップがセカンダリサーバーに適用されない場合。この状況では、ログチェーンが壊れないため、 COPY_ONLY バックアップを使用する必要があります。フルバックアップではログが切り捨てられないため、これはログバックアップにのみ適用されます。

ログ配布を使用する場合、ログが継続的に増大しないようにするのに十分ですか、それとも(たとえば保守計画を使用して)ログをバックアップする必要がありますか?

データベースミラーリング、長時間実行トランザクション、レプリケーション、さらにはデータベーススナップショットの作成など、ログの切り捨てを停止する何かがない限り、これで問題ありません。ログが切り捨てられない理由を見つける方法は、sys.databasesのlog_reuse_wait_desc列を調べることです。

ログ配布のバックアップジョブがCOPY_ONLY/NO_TRUNCATEを使用してバックアップを作成している可能性もあります。これは、ログファイルがいっぱいになると継続的に大きくなることを意味します。

これはそれほど重要ではありませんが、ログファイル用に利用可能なスペースよりも多くのスペースを必要とするバックアップを取得した場合、ログファイルなしまたはなしで復元する方法はありますか?ソースで問題を修正し、新しいバックアップを取得します。

ログファイルを縮小してから完全バックアップを作成する場合、それを復元すると、SQLServerは小さいログファイルを使用してデータベースを作成します。

縮小できないが開発/テストサーバーに復元している場合は、一時ストレージをマウントし、RESTOREステートメントで「WITHMOVE」を使用してログファイルをそのドライブに移動してから、ログを縮小してログを移動できます。一時ストレージからファイルを削除します(ログを縮小する必要があるかどうかについての注意事項)。

3
Rob Watkins