MSSQLAdm

Продвинутые методы резервного копирования

Простой метод резервного копирования – это регулярное создания полных резервных копий (например, при помощи MSSQLAdm). Этот метод обладает следующим недостатком: создание полной резервной копии – процесс весьма ресурсоемкий, что делает нежелательным резервное копирование в середине рабочего дня. В итоге, скорее всего, резервные копии будут создаваться не чаще раза в день. Если при работе база данных будет испорчена, то при восстановлении резервной копии будут потеряны все изменения с момента ее создания (как минимум, вся работа бухгалтеров за текущий день). В данной инструкции предлагается стратегия резервного копирования, позволяющая восстановить состояние базы в определенный момент времени. Это позволяет восстановить состояние базы на момент, не сильно отстоящий от сбоя (или, например, внесенного из-за ошибки оператора нежелательного изменения вроде удаления части данных).

Описанная схема резервного копирования требует определенной квалификации настраивающего ее человека. Ее использование целесообразно в том случае, когда с Инфо-Бухгалтером работает много человек, потеря дня работы которых существенна, а квалифицированный системный администратор есть в штате. В противном случае простая схема с ежедневным созданием полной резервной копии может оказаться более разумной.

Автоматизация

В данном руководстве все действия выполняются через Microsoft SQL Server Management Studio. В состав дистрибутива Инфо-Бухгалтера эта программа не входит, ее придется поставить отдельно. Все действия в SQL Server Management Studio сводятся к выполнению определенных запросов. Их можно сохранить и потом использовать для администрирования любую программу, которая умеет подключаться к SQL Server и выполнять там запросы – это позволяет автоматизировать резервное копирование. Для SQL Server Express (бесплатной) можно использовать планировщик Windows и входящую в состав поставки SQL Server утилиту sqlcmd; для полной версии Sql Server можно использовать Sql Server Agent. Для того, чтобы получить эти запросы, в окне, где выполняется действие, после настройки всех нужных параметров нужно нажать кнопку "Script" в верху окна – после этого откроется окно редактора с требуемым запросом. Его затем можно сохранить и использовать.

Практически все действия в Microsoft SQL Server Management Studio выполняются через контекстное меню нужной базы данных:

Настройка резервного копирования

Сначала нужно установить полный режим восстановления (full recovery mode) в свойствах базы данных в разделе "Options". Как и практически везде в SQL Server Management Studio, тут можно для вносимых изменений получить код соответствующего запроса. Для этого нужно нажать кнопку "Script".

Внимание: если установить эту настройку и не выполнять описанные ниже действия, это приведет к неограниченному росту размера журнала транзакций (transaction log) во время работы. Если это произошло, нужно переключиться обратно в простой режим восстановления (recovery mode: simple), и выполнить сжатие (shrink) базы данных (или только самого журнала транзакций). Это можно сделать при помощи MSSQLAdm.

Типы резервных копий

Существует 3 типа резервных копий базы данных:

  1. Полная резервная копия (full). Содержит всю базу данных.
  2. Разностная резервная копия (differential). Содержит только те части базы данных, которые поменялись с момента последнего создания полной резервной копии.
  3. Резервная копия журнала транзакций. В журнал транзакций последовательно записываются все изменения, которые производились в базе данных. Именно она и позволяет восстановить состояние базы данных на определенный момент времени.

Для восстановления состояния базы данных в определенный момент времени нужны резервные копии, составляющие путь восстановления (recovery path) до этого состояния. Этот путь всегда начинается с полной резервной копии базы данных. Далее он может продолжиться разностной резервной копией (которая для своего восстановления требует соответствующей полной резервной копии). Восстановление до конкретного момента времени происходит через резервную копию журнала транзакций.

Создание резервных копий

Начать нужно с создания полной резервной копии базы данных (в контекстном меню базы данных Tasks – Back Up...). В качестве места назначения для резервной копии укажите файл (указанная папка должна существовать). На случай сбоя диска желательно, чтобы этот файл и база данных располагались на разных дисках.

Несколько резервных копий могут располагаться в одном файле. По умолчанию при указании как места для резервной копии существующего файла резервная копия просто дописывается в конец (но это может быть изменено на вкладке "Options", "Overwrite media"). Для простоты восстановления рекомендуется держать в одном файле одну полную резервную копию и все зависимые от нее резервные копии (разностные и журнала транзакций). Его содержимое можно просмотреть в диалоге резервного копирования или в диалоге восстановления резервной копии (в первом – кнопка "Contents"). Со временем этот файл будет расти за счет добавлений; поэтому нужно регулярно (например, раз в неделю на выходных) создавать новую полную резервную копию в новый файл (а старый переносить в другое место).

Разностная резервная копия создается аналогично полной. Единственное отличие – значение поля "Backup type" в диалоговом окне (нужно поставить "Differential"). Она создается быстрее полной резервной копии, но для восстановления требуется последняя полная резервная копия, которая создавалась перед разностной. Со временем из-за накопления изменений объем разностной резервной копии растет и смысл ее создания исчезает. Поэтому нужно достаточно регулярно создавать полные резервные копии. Выбирайте стратегию создания исходя из размера базы данных, времени, требуемого для создания резервной копии (если полная создается быстро – смысл экономить?) и требуемого уровня надежности.

Резервная копия журнала транзакций (transaction log) создается аналогичным образом:

Объем резервной копии журнала транзакций пропорционален не объему базы данных, а объему внесенных в базу изменений со времени создания предыдущей резервной копии. Таким образом, ее можно создавать достаточно часто – например, раз в 5-10 минут. Вручную такое делать явно нерационально, процесс нужно автоматизировать.

После внесения в базу масштабных изменений (например, переконфигурации базы данных ИБ или ее сжатия) желательно сделать полную резервную копию. Прочие виды резервного копирования сохраняют только изменения базы и после больших изменений теряют эффективность (т.к. объем изменений становится сравнимым с объемом базы).

Восстановление резервной копии

Перед восстановлением базу данных нужно перевести в однопользовательский режим. Если этого не сделать, то любое подключение к базе сделает восстановление невозможным. Делается это в свойствах базы данных на вкладке "Options", настройка "Restrict Access" - там нужно поставить "Single User".

Непосредственно перед восстановлением желательно сделать резервную копию журнала транзакций. Это позволит сохранить все текущие изменения (на случай, если они вам все-таки понадобятся).

Затем в контекстном меню базы данных Tasks – Restore – Database... . В появившемся окне нужно настроить источник данных, затем выбрать наборы для восстановления. При выборе учитывайте то, что выбранным должен быть весь путь восстановления: полная резервная копия, сделанная до нужного момента (на нее все опирается), последняя разностная до нужного момента, затем копии журнала. Также тут настраивается момент времени, состояние базы данных в который нужно восстановить:

В опциях установите перезапись (overwrite) базы данных:

И запускайте восстановление. После восстановления не забудьте проверить режим доступа к базе данных – там мог сохраниться ранее установленный однопользовательский режим.

Возможные ошибки

Неверно указан набор данных для восстановления (флажки в списке). Что-то пропущено. См. выше.

Перед восстановлением не была создана резервная копия журнала. Если вас не интересуют самые последние изменения, которые произошли после последней резервной копии журнала (самый типичный случай) – поставьте в настройках перезапись базы данных. Если они могут понадобиться – сделайте резервную копию журнала.

Не включен однопользовательский режим; сделайте это.

Дополнительные материалы

  1. Restoring a Database to a Point Within a Backup
  2. Restore and Recovery Overview (SQL Server)