web-dev-qa-db-ja.com

SQL Serverでは、実際の復元は内部的にどのように機能しますか?

データベースDB1が一部のデータを失ったものの、完全、差分、トランザクションログのバックアップがあるとします。

完全バックアップ\差分バックアップまでは、データベースのスナップショットのようなものだと理解できますが、この後、ポイントインタイムリカバリがある場合のTログバックアップの仕組みはわかります。

Tログバックアップからコミットされたすべてのトランザクションが順番に取得され、その後、データベース(DB1)で再度実行された後と同様の意味です。

これは正解?

「はい」の場合、ログ配布中、つまりログが一方の端から他方の端に送信されるときに、これと同じです。

前もって感謝します。

2
Harsh Sanghai

これはデータベースのバックアップと復元の中核的な方法論であり、バックアップを取ることの全体的な目的は、ディスク障害、サーバー障害、データベースクラッシュなどの望ましくないインシデントが発生した場合にそれを特定の時点に復元できるようにすることです。

them を1つずつ理解しましょう。

完全バックアップ

名前が示すように、完全バックアップはすべてをバックアップします。これは、あらゆる種類のバックアップの基礎です。これは完全なコピーであり、データベースのすべてのオブジェクト(テーブル、プロシージャ、関数、ビュー、インデックスなど)を格納します。完全バックアップがあれば、データベースを元の状態とまったく同じ形式で簡単に復元できます。バックアップの時間。

完全バックアップでは、データベースの完全なバックアップとトランザクションログの一部が作成されるため、データベースを回復できます。これにより、すべての内容が1つのバックアップに含まれるため、最も単純な形式のデータベース復元が可能になります。

他の種類のバックアップを実行する前に、フルバックアップを少なくとも1回実行する必要があります。これが、他のすべての種類のバックアップの基礎となります。

差分バックアップ

差分データベースバックアップは、最後の完全バックアップのスーパーセットであり、最後の完全バックアップ以降に行われたすべての変更が含まれています。したがって、最近発生したトランザクションが非常に少ない場合、差分バックアップのサイズは小さくなる可能性がありますが、多数のトランザクションを実行した場合、差分バックアップのサイズは非常に大きくなる可能性があります。

差分バックアップではすべてがバックアップされるわけではないため、通常、バックアップは完全バックアップよりも高速に実行されます。差分データベースバックアップは、バックアップの作成時に変更されたエクステントの状態をキャプチャします。一連の差分バックアップを作成すると、頻繁に更新されるデータベースには、各差分に異なるデータが含まれる可能性があります。差分バックアップのサイズが大きくなると、差分バックアップを復元すると、データベースの復元に必要な時間が大幅に増える可能性があります。したがって、データの新しい差分ベースを確立するために、設定された間隔で新しい完全バックアップを取ることをお勧めします。

差分バックアップは、ストレージスペースとバックアップにかかる時間を節約します。ただし、時間の経過とともにデータが変化すると、差分バックアップのサイズも増加します。差分バックアップの経過時間が長くなり、サイズが大きくなると、ある時点でフルバックアップのサイズに達する場合があります。大規模な差分バックアップでは、最新の差分バックアップを復元する前に完全バックアップを復元する必要があるため、高速で小さなバックアップの利点が失われます。通常、最新の完全バックアップを復元した後、その完全バックアップに基づく最新の差分バックアップを復元します。

トランザクションログバックアップ

ログバックアップは、その名前が示すように、トランザクションログをバックアップします。このバックアップタイプは、完全または一括ログ復旧モデルでのみ可能です。トランザクションログファイルには、データのすべての変更の履歴を提供する一連のログがデータベースに格納されます。トランザクションログバックアップには、最後のトランザクションログバックアップに含まれていないすべてのログレコードが含まれます。

データベースを特定の時点に回復することができます。つまり、トランザクションログのバックアップは増分であり、差分バックアップは本質的に累積的です。データベースを特定の時点に復元する場合は、完全な最新の差分と、その特定の時点まで、または非常に近い時点までデータベースを構築するために必要なすべての対応するトランザクションログレコードを復元する必要があります。データ損失につながる事故が発生する直前の望ましい時点。この一連の変更は、LSN(ログシーケンス番号)ログチェーン内。ログバックアップチェーンは、データベースを特定の時点に回復するために必要なすべてのトランザクションログレコードを含む、連続した一連のログです。ログチェーンは常にデータベースの完全バックアップから始まり、それが原因でチェーンが切断されるまで継続します(たとえば、データベースの復旧モデルをシンプルに変更する、または追加の完全バックアップを行うなど)。これにより、ログバックアップが行われないようにします。そのデータベースに対して別の完全(または差分)バックアップが開始されるまで、データベース。

より明確にするために、以下の画像を参照できます。

enter image description here

以下の image は、完全、差分、および以前のログバックアップの復元が完了したら、SSMSを使用してポイントインタイムの復元を行う方法を示しています。

Point in time restoration Screenshot

ログ配布は同じ概念で機能しますが、完全バックアップと差分バックアップの復元は初期設定の一部ですが、ログのバックアップと復元はLSNの部分で機能します。プライマリサーバーでの各ログバックアップは最後のLSNを維持します。これはセカンダリサーバーで比較され、それに応じて適用されます。

データベース復元の内部に関する限り、詳細については theselinks を参照してください。

基本的に、障害やクリーンでないシャットダウンが発生した場合、3つのフェーズを経ます。

  1. 分析フェーズでは、トランザクションログを分析して最後のチェックポイントを特定し、ダーティページテーブル(DPT)とアクティブトランザクションテーブル(ATT)を作成します。 DPTには、データベースのシャットダウン時にダーティだったページのレコードが含まれています。 ATTには、データベースが正常にシャットダウンされなかったときにアクティブだったトランザクションのレコードが含まれています。

  2. やり直しフェーズでは、データベースのシャットダウン時にデータファイルに書き込まれていない可能性がある、ログに記録されたすべての変更がロールフォワードされます。データベース全体のリカバリを成功させるために必要な最小ログシーケンス番号(minLSN)はDPTにあり、すべてのダーティページで必要なREDO操作の開始を示します。このフェーズでは、SQL Serverデータベースエンジンは、コミットされたトランザクションに属するすべてのダーティページをディスクに書き込みます。

  3. 元に戻すフェーズでは、ATTで見つかった不完全なトランザクションをロールバックして、データベースの整合性が保持されるようにします。ロールバック後、データベースはオンラインになり、トランザクションログのバックアップをデータベースに適用できなくなります。

完全バックアップと差分バックアップおよびログバックアップからデータベースを復元する場合、リカバリコマンドを使用せずに、つまり、NORECOVERYを指定して2番目のフェーズが実行され、最後にコミットされたトランザクションまでやり直されます。リカバリ用のコマンドを発行すると、つまり最後のログバックアップの復元またはポイントインタイムの復元では、元に戻す操作が実行され、その後ログバックアップを適用できなくなります。

最初のフェーズ、つまり分析フェーズは、データベースが障害またはクリーンでないシャットダウンから立ち上がったときであり、バックアップの復元の場合には適用されません。

上記が役立つことを願っています。

2

完全\差分バックアップまでは、データベースのスナップショットのようなものだと理解できます

いいえ、データベースのスナップショットは取得しません。実際のデータをバックアップします。 Paul Randalが書いた古い記事を読んでください SQL Serverバックアップについて

t-log Backupがどのように機能するか(特定の時点の回復がある場合)。

説明する代わりに記事から引用します

ログバックアップチェーンは、データベースを特定の時点に復旧するために必要なすべてのトランザクションログレコードを含む、一連の途切れのないログバックアップです。チェーンはデータベースの完全バックアップから始まり、何かがチェーンを切断するまで続きます。したがって、別の完全(または差分)バックアップが行われるまで、ログバックアップが行われることはありません。

Tログバックアップからコミットされたすべてのトランザクションが順番に取得され、その後、データベース(DB1)で再度実行された後と同様の意味です。

ログのバックアップには、コミットされたトランザクションとコミットされていないトランザクションの両方が含まれます。ログバックアップを順次復元すると、コミットされたすべてのトランザクションがロールフォワードされ、コミットされていないトランザクションはロールバックされます。

「はい」の場合、ログ配布中、つまりログが一方の端から他方の端に送信されるときに、これと同じです。

ログ配布も同じパターンに従い、ログはプライマリでバックアップされ、セカンダリで順次復元されます。

Backup Myths ブログ、Paul Randalもお勧めします

2
Shanky