Невозможно сделать разностное резервное копирование с помощью SQL Server VSS Writer
Я пытался разработать инструмент для резервного копирования / восстановления MS SQL Server с использованием SQL Server VSS Writer. Я не могу заставить работать дифференциальную резервную копию! Мне просто любопытно, делал ли кто-нибудь дифференциальное резервное копирование с использованием VSS. Вот что я делал:
- Создайте полную резервную копию и сохраните файлы и связанный с ним документ компонента Backup.
- Обновите таблицы в базе данных.
- Создайте новую резервную копию, установив SetBackupState как VSS_BT_DIFFERENTIAL
- Теперь при добавлении существующих компонентов в документ компонента резервного копирования я нахожу метку времени компонента в документе на шаге 1, а затем вызываю его с помощью SetPreviousBackupStamp.
- Теперь, после создания снимка, я прохожу каждый компонент и вызываю API GetPartialFileCount. Это всегда возвращает значение 0. Я предполагаю, что если есть изменения в существующем компоненте, он должен давать значение больше 0.
Я что-то здесь упускаю? Нужно ли нам запускать SQL Server VSS Writer, используя определенные параметры или что-то еще? Я пробовал разные конфигурации, в том числе (Windows Server 2008/ SQL Server 2008)
1 ответ
Я давно хотел обновить этот пост, но был связан со всеми ошибками, которые я обнаружил в программе. Несколько человек из Microsoft помогли мне понять проблему, с которой я столкнулся. Я просто хочу поблагодарить Дилипа и Рамеша (я оставляю их фамилии по понятным причинам) за помощь в преодолении этого.
Вот мои выводы:
SQL VSS Writer поддерживает дифференциальное резервное копирование.
При создании дифференциальной резервной копии не включайте "главный" компонент в качестве компонента для резервного копирования.
Всегда проверяйте наличие ошибки состояния Writer после каждой фазы, используя следующую последовательность API: GatherWriterStatus(), GetWriterStatusCount(), GetWriterStatus()
Если статус писателя указывает на ошибку, оттуда вещи непредсказуемы.
Лучшее место, где можно начать поиск работы, - это исходный код BETest, доступный как часть VSS SDK.
BETest позволяет создавать резервные копии одной базы данных (полная / дифференциальная) и восстанавливать (полная / дифференциальная), при условии, что вы правильно выбрали параметр /C. Синтаксис компонентов: "{Writer Id}":"Полное имя компонента" Например, для базы данных "Персона" на моем компьютере файл информации о моем компоненте содержал: "{A65FAA63-5EA8-4EBC-9DBD-A0C4DB26912A}":"ABP-PC\SQLEXPRESS\Person";
При выполнении дифференциального восстановления полное восстановление необходимо выполнить с помощью параметра "/AdditionalRestores".
Надеюсь это поможет. Если кому-то понадобится помощь, обновите этот пост, и я получу уведомление. Я помогу.