SQL Server записывает операцию резервного копирования в таблицу журнала наборов резервных копий при использовании VSS для резервного копирования файлов на томе

В этой статье описывается поведение "по умолчанию", которое возникает при использовании VSS для резервного копирования файлов на томе.

Оригинальная версия продукта: SQL Server
Исходный номер базы знаний: 951288

Симптомы

При использовании приложения службы теневого копирования томов (VSS) для резервного копирования файлов на томе, который включает SQL Server файлы базы данных, SQL Server записывает операцию резервного копирования в таблицу backupset журнала. Это происходит, даже если вы не выполнили резервное копирование файлов базы данных SQL Server.

Причина

Это происходит из-за того, что приложение VSS вызывает службу SQLWriter в системе во время операции резервного копирования. Дополнительные сведения о взаимодействии приложений VSS с модулем записи SQL см. в SQL Server Резервное копирование приложений — служба теневого копирования томов (VSS) и модуль записи SQL.

Меры предосторожности при использовании записей в таблице журнала резервных наборов данных для восстановления данных

Если вы хотите использовать записи в backupset таблице журнала для восстановления данных, необходимо убедиться, что записи представляют фактические операции резервного копирования базы данных.

Убедитесь, что запись представляет собственную операцию резервного копирования базы данных (в отличие от резервной копии VSS snapshot).

Для этого выполните следующую инструкцию:

USE msdb
GO

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

В результате обратите внимание на database_backup_lsn столбец и is_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_damaged в backupset таблице указывает, было ли обнаружено повреждение базы данных при создании резервной копии. Таким образом, резервная копия может быть повреждена и не может быть восстановлена.