vss を使用してボリューム上のファイルをバックアップする場合、バックアップ操作をバックアップセット履歴テーブルに記録SQL Server

この記事では、VSS を使用してボリューム上のファイルをバックアップするときに発生する "仕様別" の動作について説明します。

元の製品バージョン: SQL Server
元の KB 番号: 951288

現象

ボリューム シャドウ コピー サービス (VSS) アプリケーションを使用して、SQL Server データベース ファイルを含むボリューム上のファイルをバックアップする場合、SQL Serverは履歴テーブルにバックアップ操作をbackupset記録します。 この動作は、SQL Serverのデータベース ファイルを実際にバックアップしなかった場合でも発生します。

原因

この動作は、VSS アプリケーションがバックアップ操作中にシステム上で SQLWriter サービスを呼び出しているために発生します。 VSS アプリケーションと SQL ライターの対話方法の詳細については、「アプリケーションのバックアップ - ボリューム シャドウ コピー サービス (VSS) と SQL ライター」SQL Server参照してください。

データ復旧のためにバックアップセット履歴テーブルのエントリを使用する場合の注意事項

履歴テーブルのエントリを backupset データ復旧に使用する場合は、エントリが実際のデータベース バックアップ操作を表していることを確認する必要があります。

エントリが (VSS スナップショット バックアップではなく) ネイティブ データベース バックアップ操作を表していることを確認します

これを行うには、次のステートメントを実行します。

USE msdb
GO

SELECT server_name, database_name, backup_start_date, is_snapshot, database_backup_lsn
FROM backupset

結果として、列と列にdatabase_backup_lsnis_snapshot注目してください。 ネイティブ データベース バックアップ操作を表すエントリには、次の特性があります。

  • 列の database_backup_lsn 値は 0 ではありません。
  • 列の is_snapshot 値は 0 です

バックアップ セットにエラーがないことを確認する

これを行うには、次のステートメントを実行します。

WITH backupInfo AS( SELECT database_name AS [DatabaseName],
name AS [BackupName], is_damaged AS [BackupStatus],
backup_start_date AS [backupDate],
ROW_NUMBER() OVER(PARTITION BY database_name
ORDER BY backup_start_date DESC) AS BackupIDForDB
FROM msdb..backupset) SELECT DatabaseName
FROM backupinfo WHERE BackupIDForDB = 1 and BackupStatus=1

このクエリが結果を返す場合は、報告された日付以降に適切なデータベース バックアップがないことを意味します。 データベースの完全バックアップをできるだけ早く実行し、データベースの完全バックアップがクリーンされていることを確認することを強くお勧めします。

is_damaged プロパティ

backupset msdb データベース内のテーブルには、バックアップ セットごとに行が含まれています。 テーブルの プロパティは is_damagedbackupset バックアップの作成時にデータベースの損傷が検出されたかどうかを示します。 そのため、バックアップが破損し、復元できない可能性があります。