Резервное копирование информационных баз 1С 8.1, 8.2


Организация автоматического резервного копирования информационных баз 1С 8.1, 8.2 для типовых конфигураций.

Недавно столкнулся с необходимостью создания резервных копий баз (файловый вариант, архивы в виде dt-файла) и, конечно, сразу захотелось автоматизировать сей процесс, и так, чтобы было как можно проще, но работало. Было найдено достаточно большое количество решений. Наиболее простым показалось использование bat-файла: одна строчка и всё работает, НО при условии, что в базе никого нет. Наложение данного условия значительно усложнило задачу (можно, конечно, было перезапускать кластер, добавив ragent.exe -stop, ragent.exe -start в bat-файл, но это грубый способ, а хотелось корректного отключения пользователей). Задача архивирования с отключением пользователей решалась использованием vbs-файла, но при этом соответствующий скриптовый код уже не отличался простотой понимания и объемом содержания, что вызывало определенные трудности.

В общем, я пришел к следующему (по-моему простому) способу автоматического бэкапа:

1. Создание "выгонялки" средствами 1С.

2. Создание bat-файла, с параметрами запуска "выгонялки", а затем архивирования базы.

3. Добавление bat-файла в планировщик событий Windows. 

Итак:

1. В типовых конфигурациях в общем модуле ГлобальныйМодуль есть процедура отключения пользователей ЗавершитьРаботуПользователей() (в УТ, БП, ЗУП, УПП есть точно).  Вот её нам и необходимо запустить перед архивацией.

Для этого в конфигураторе создаем обработку, для обработки создаем форму и в модуль формы вставляем следующий текст:

Процедура ПриОткрытии()
ТекущийРежим = ПолучитьБлокировкуУстановкиСоединений();
ТекущийРежим.КодРазрешения = "КодРазрешения";
ТекущийРежим.Начало = ТекущаяДата();
ТекущийРежим.Конец = ТекущаяДата() + 300;
ТекущийРежим.Установлена = Истина;
УстановитьБлокировкуУстановкиСоединений(ТекущийРежим);
ЗавершитьРаботуПользователей();
КонецПроцедуры

Здесь перед вызовом процедуры ЗавершитьРаботуПользователей() необходимо установить блокировку соединений с базой, иначе она просто не сработает. Число 300 в ТекущийРежим.Конец означает 300 секунд, получается блокировка базы будет установлена на 5 мин с момента запуска обработки - вполне достаточно, чтобы отключить всех пользователей от базы. Сохраним обработку (у меня Epf81.epf). Для 8.1 и 8.2 код идентичен, достаточно переконвертировать обработку для 8.1.

2. Запустим блокнот и вставим следующий текст:

chcp 1251
@echo off

"C:\Program Files\1cv81\bin\1cv8.exe" ENTERPRISE /F"D:\Base" /NПользователь /PПароль /DisableStartupMessages /Execute Epf81.epf

"C:\Program Files\1cv81\bin\1cv8.exe" CONFIG /F"D:\Base" /NПользователь /PПароль /UCКодРазрешения /DisableStartupMessages /DumpIB"D:\Backup\backup_%date%.dt" 

Сохраним как backup81.dat

Первой строчкой мы запускаем обработку Epf81.epf от имени Пользователь (подставляете своего с администраторскими правами) с соответствующим паролем. Затем после того, как все пользователи будут отключены (отключаются и те, у которых стоит запрос на выход из программы, только чуть дольше) отработает вторая строчка, которая запускает систему 1С в режиме конфигуратора под тем же пользователем и создает dt-шник в папке D:\Backup, в имя файла будет подставлена текущая дата.

Путь к исполняемому фалу "C:\Program Files\1cv81\bin\1cv8.exe" заменяете, если у вас другой. Соответственно меняете путь к базе "D:\Base". Во второй строчке, для того, чтобы база нас пустила, в параметре /UC указывается код блокировки ТекущийРежим.КодРазрешения = "КодРазрешения", заданный в обработке Epf81.epf.

3. Добавляем в планировщик Windows или любой другой. (Можно посмотреть здесь http://www.ithowto.ru/376-kak-sozdat-naznachennoe-zadanie-pri-pomoshhi-planirovshhika-zadanij-windows.html)

P.S. В описании, с целью простоты понимания, текст bat-файла урезан. В том, который во вложении, добавлено создание лога процесса архивирования, дата создания dt-шника указывается с точностью до секунды и пути к исполняемому файлу, базе и архиву вынесены в переменные. Лог создается в той же дирректории, где находится сам bat-файл.

Данный способ тестировался только на файловых базах типовых УТ, ЗУП, БП 8.1 и 8.2, как работает на клиент-серверных не знаю.

Файлы обработки:

-