バックアップ中および復元中のメディア エラーの検出と処置

Microsoft SQL Server 2005 以降のバージョンでは、エラー検出のシステムが改善され、エラーが検出されてもデータベースを復旧するオプションを選択できるようになりました。エラー検出の重要なメカニズムとして、バックアップ チェックサムを任意で作成できるようになりました。バックアップ チェックサムは、バックアップ操作で生成して、復元操作で検証できます。操作中にエラーを検出するかどうかと、エラー発生時に操作を停止するか続行するかを制御できます。バックアップにバックアップ チェックサムが含まれている場合、RESTORE ステートメントおよび RESTORE VERIFYONLY ステートメントでエラーを検査できます。

注意注意

ミラー化バックアップでは、メディア セットのコピー (ミラー) が最大で 4 つ作成され、メディアの破損によるエラーから復旧するために使用する代替コピーが提供されます。詳細については、「ミラー化バックアップ メディア セットの使用」を参照してください。

BACKUP 実行時のチェックサム

SQL Server でサポートされているチェックサムは、ページ チェックサム、ログ ブロック チェックサム、およびバックアップ チェックサムの 3 種類です。バックアップ チェックサムの生成時には、データベースから読み取ったデータについて、データベース内に存在するチェックサムや破損ページ情報との整合性が BACKUP によって検証されます。

BACKUP ステートメントではオプションで、バックアップ ストリームのバックアップ チェックサムを計算できます。特定のページにページ チェックサムまたは破損ページ情報がある場合、ページのバックアップ時に、そのページのチェックサムおよび破損ページの状態とページ ID も検証されます。バックアップ操作でバックアップ チェックサムを作成する際に、チェックサムがページに追加されることはありません。ページはデータベースに存在するままの状態でバックアップされます。バックアップでページは変更されません。バックアップ チェックサムを使用すると、検証および生成の際のオーバーヘッドによって、パフォーマンスに影響を及ぼす可能性があります。影響はワークロードおよびバックアップ スループットの両方に及ぶ場合があります。このため、バックアップ チェックサムの使用は任意です。バックアップ時にチェックサムを生成する場合は、システムで進行中のワークロードへの影響だけでなく、発生する CPU オーバーヘッドも注意深く監視してください。

注意注意

BACKUP を実行してもディスク上の元のページおよびページの内容は変更されません。

次に示す BACKUP のオプションで、バックアップ チェックサムの動作を制御します。

  • CHECKSUM

    有効かつ使用可能であれば、バックアップ操作に対し、各ページのチェックサムおよび破損ページを検証し、バックアップ全体のチェックサムを生成するように要求します。

    バックアップ操作では、チェックサムの検証が要求されると、次の動作が行われます。

    • ページをバックアップ メディアに書き込む前に、ページ レベルの情報が検証されます (ページ チェックサムまたは破損ページ情報のいずれかが存在する場合)。いずれの情報も存在しない場合は、ページを検証できません。ページはそのまま書き込まれ、内容が全体のバックアップ チェックサムに加算されます。

      注意注意

      ページ チェックサムおよび破損ページ検出の詳細については、ALTER DATABASE ステートメントの PAGE_VERIFY オプションを参照してください。詳細については、「ALTER DATABASE (Transact-SQL)」を参照してください。

    • 復元時のオプションとして、バックアップではページ チェックサムが存在するかどうかに関係なく、個別のバックアップ チェックサム (バックアップ チェックサム) が生成され、これがバックアップ メディアに記録されます。

    • バックアップ セットは (msdb..backupsethas_backup_checksums 列に) バックアップ チェックサムがあるものとしてフラグが付けられます。詳細については、「backupset (Transact-SQL)」を参照してください。

    注意注意

    ログ バックアップでは、バックアップ チェックサムが生成および検証されます。

  • NO_CHECKSUM

    ページの検証およびバックアップ チェックサムの生成を明示的に無効にします (既定の動作です)。

エラーに対する応答の制御

CHECKSUMS を指定した場合、検証中に BACKUP によりページ エラーが検出されると、バックアップが失敗します。この動作は BACKUP の次に示すオプションで制御します。

  • CONTINUE_AFTER_ERROR

    無効なバックアップ チェックサムを検出した場合も処理を続行します。このオプションを指定した場合の BACKUP の動作は次のとおりです。

    バックアップ メディア上のバックアップ セットに対し、エラーが存在するというフラグを設定し、msdb データベースの suspect_pages テーブルでそのページを追跡します。詳細については、「suspect_pages (Transact-SQL)」を参照してください。

    • SQL Server エラー ログにエラーを記録します。

    • バックアップ セットに対し、この種類のエラーが存在するというマークを (msdb.backupsetis_damaged 列に) 付けます。詳細については、「backupset (Transact-SQL)」を参照してください。

    • 正常にバックアップが生成されたがページ エラーが含まれていることを示すメッセージを表示します。

  • STOP_ON_ERROR

    チェックサムの検証エラー時に BACKUP を失敗にします (既定の動作です)。

RESTORE および RESTORE VERIFYONLY 実行時のチェックサム

バックアップ メディアにバックアップ チェックサムがある場合、既定では RESTORE および RESTORE VERIFYONLY の両方の操作でバックアップ チェックサムおよびページ チェックサムが検証されます。バックアップ チェックサムがない場合、いずれの復元操作も検証が行われずに続行されます。これは、バックアップ チェックサムがないと、ページ チェックサムの検証を確実に実行できないためです。

2 つのオプション (CHECKSUM および NO_CHECKSUM) を使用して、RESTORE および RESTORE VERIFYONLY によるチェックサムの検証動作を次のように変更できます。

  • CHECKSUM

    復元操作に対し CHECKSUM を明示的に要求した場合、およびバックアップにバックアップ チェックサムが含まれている場合、バックアップ チェックサムおよびページ チェックサムの両方が検証されます (既定の動作です)。ただし、バックアップ セットにバックアップ チェックサムがない場合、復元操作は失敗し、チェックサムがないことを示すメッセージが表示されます。

  • NO_CHECKSUM

    復元操作による既定のチェックサムの検証を明示的に無効にします。

エラーに対する応答の制御

エラー発生時の復元操作の動作を指定するには、次に示す RESTORE および RESTORE VERIFYONLY の各オプションを使用します。

  • CONTINUE_AFTER_ERROR

    エラー発生後も復元操作を続行することを指定します。これは RESTORE VERIFYONLY の既定の動作です。このオプションを指定すると検証エラーが報告され操作が続行されます。このとき、バックアップ セットについて可能な限りの情報を得られます。CONTINUE_AFTER_ERROR により RESTORE の動作はできる限り続行されます。その際、無効なチェックサムがスキップされます。

  • STOP_ON_ERROR

    最初のエラーが発生した時点で復元操作を停止して失敗とするように指定します。これは RESTORE の既定の動作です。