Программисту 1С — настройка автоматического резервного копирования и автоматического восстановления копии базы данных без остановки работы пользователей средствами SQL сервера

В данной статье мы расскажем о том, как можно удобно для программиста 1С настроить автоматическое создание и разворачивание копии базы данных текущего дня в другую базу.
В некоторых случаях, кроме обычной настройки резервного копирования рабочей базы данных, бывает полезно ежедневно автоматически разворачивать созданные копии «в сторонке» для анализа, например, действий пользователей. Это зачастую удобнее, чем использование механизма версионирования объектов в базах 1С.
Особенно это актуально, когда вы занимаетесь сопровождением базы данных с большим количеством пользователей, которая активно наполняется данными и которую нежелательно останавливать для расследования каких-то ошибок, когда нужно иметь под рукой свежие данные, но при этом не хотелось бы случайно испортить рабочую базу данных.

Для этого будет очень удобно настроить ежедневное автоматическое восстановление вчерашней копии базы данных в другую базу данных.

Рассмотрим пример, когда рабочая база данных имеет пять автоматически создаваемых регулярно обновляемых копий по дням недели с понедельника по пятницу. С помощью такого механизма программист, анализирующий работу пользователей, может в любую секунду зайти в базу данных за любой день прошедшей недели.

Рассмотрим пример настройки этого механизма в MS SQL Server 2008 R2.
Зайдем в среду Microsoft SQL Management Studio: Управление – Планы обслуживания – Мастер планов обслуживания.

На первой странице открывшегося мастера нажмем Далее, на следующей странице дадим имя плану обслуживания Четверг и нажмем на кнопку Изменить в поле расписания:

Настроим расписание как показано на рисунке:

Нажмем на кнопу ОК и затем на кнопку Далее в мастере.
На следующей странице мастера выберем Резервное копирование базы данных (полное) и затем два раза жмем на кнопку Далее:

В следующем окне в поле Базы данных выберите свою рабочую базу, с которой будете снимать слепки:

Остальные настройки смотри на рисунке ниже:
Переключатель в «Создать резервную копию базы данных в одном или нескольких файлах» — кнопка «Добавить» — указываем путь к файлу, в котором у нас будет копия базы за четверг:

У имени файла не забудьте указать расширение “bak”

Затем указываем «Перезаписать» в поле «Если файлы резервной копии существуют».
Ставим галочку «Проверять целостность резервной копии».
В поле «Сжимать резервные копии» явно задаем параметр «Не сжимать резервные копии» и затем жмем на кнопку «Далее»:

В следующем окне указываем где хранить отчет о работе плана обслуживания:

В последнем окне жмем Готово:

Наблюдаем за успешным ходом работы мастера и закрываем окно:

Теперь можно проверить работоспособность, запустив создание копии вручную (и заодно создав копию за четверг в нужном нам месте – дальше мы этот файл будем использовать при восстановлении):

Таким образом мы настроили еженедельное создание копии рабочей базы по четвергам в 23:30 в отдельно лежащий на диске файл с именем Четверг.bak
Аналогично настраиваем создание копий в пятницу, понедельник, вторник и среду – каждая копия в своем файле, который будет еженедельно перезаписываться, каждый в свой день.
Теперь нужно настроить автоматическое восстановление из этих копий в базы данных, названные для примера Понедельник, Вторник, Среда, Четверг, Пятница (создание баз данных см. в руководстве администратора по созданию баз данных 1С – лучше всего создавать SQL базы через стандартный ярлык запуска 1С, не нужно мудрить и идти на сервер, создавать там базу вручную в среде MS SQL).
Рассмотрим настройку автоматического восстановления базы данных из созданного ранее бакапа снова на примере Четверга.

В среде MS SQL Management Studio выбираем пункт Агент SQL Server – Задание – Создать задание:

В открывшемся окне на закладке Общие в поле Имя даем название, например, Восстановление Четверга, остальные поля в окне не трогаем:

Переходим на вкладку Шаги и жмем Создать:

В открывшемся окне даем имя шагу, например, RESTORE DATABASE.
В поле для скрипта пишем следующий код:

IF EXISTS (SELECT name FROM sys.databases WHERE Name = N'Четверг')
ALTER DATABASE [Четверг] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
IF EXISTS (SELECT name FROM sys.databases WHERE Name = N'Четверг')
DROP DATABASE [Четверг]
GO
RESTORE DATABASE [Четверг] from disk = 'D:\BuckupЧетверг\Четверг.bak'
with
move 'zup30k' to 'F:\MSSQL\Четверг.mdf',
move 'zup30k_log' to 'E:\MSSQL\Четверг_log.ldf',
RECOVERY, REPLACE, STATS=10

Внимание! При копировании текста скрипта из этой статьи возможно потребуется заменить все знаки одинарных кавычек — здесь в коде одинарные кавычки могут быть преобразованы не в те, которые «кушает» SQLServer!

В первых строках этого скрипта мы блокируем существующую базу Четверга для работы (вдруг там фоновое задание крутится…), чтобы наш дальнейший скрипт получил базу в монопольное владение и перезаписал ее новым четвергом, созданным час назад (см дальше на расписание).
Обратите внимание на указанные пути:
‘D:\BuckupПонедельник\Четверг.bak’ – сюда мы настроили резервное копирование в первой половине этой статьи.
F:\MSSQL\Четверг.mdf и ‘E:\MSSQL\Четверг_log.ldf’ — здесь наш сервер SQL хранит файлы базы и логов Четверга. У вас это может быть путь по умолчанию, что-то вроде C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Четверг.mdf – смотрите в свойствах своей базы Четверга на указанные там пути:

Все, с путями разобрались, вернемся к нашему созданию задания, скрипт написан, осталось только задать расписание, для этого перейдем на вкладку Расписания, нажмем Создать:

И настроим расписание в открывшемся окне:

Обратите внимание, что резервную копию за четверг, созданную в 23:30 четверга, мы по расписанию запускаем на восстановление в базу Четверга но в пятницу, в 00:30:00
Все. Жмем Ок и снова ОК.
Можно проверить работоспособность скрипта, запустив задание вручную:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *