Резервное копирование информационных баз 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 Files1cv81in1cv8.exe» ENTERPRISE /F»D:Base» /NПользователь /PПароль /DisableStartupMessages /Execute Epf81.epf

«C:Program Files1cv81in1cv8.exe» CONFIG /F»D:Base» /NПользователь /PПароль /UCКодРазрешения /DisableStartupMessages /DumpIB»D:Backupackup_%date%.dt» 

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

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

Путь к исполняемому фалу «C:Program Files1cv81in1cv8.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, как работает на клиент-серверных не знаю.

70 Comments

  1. samadurov

    Удачная идея и реализация.

    Reply
  2. anna_irk

    может проще sql настроить

    Reply
  3. valafan

    (2) anna_irk, не думаю, базы файловые

    Reply
  4. Mx00

    проще использовать CobianBackup

    бесплатен

    позволяет копировать открытые базы (использует теневое копирование)

    и много прочего позволяет делать

    Reply
  5. wizarom

    +1 За CobianBackup

    от себя еще посоветую effector saver, бекапит 1с-ки в любом виде

    Reply
  6. rus128

    Для файловых баз — удачное решение. Но для серверных нужно изменить параметры запуска 1С, если пользоваться данной методикой, хотя сама 1С рекомендует пользоваться средствами сервера базы данных .

    Reply
  7. rus128

    (4) Mx00, прикольно будет потом пытаться использовать такой бэкап, если в момент теневого копирования кто-то другой совершал транзакцию…

    Reply
  8. Mx00

    (7) rus128, это говорит только о том, что ты ничего не понимаешь в теневом копировании 🙂

    Reply
  9. valafan

    (4) Mx00, CobianBackup действительно +1, если бы нашел твою публикацию раньше, то наверняка бэкапил бы им. Единственный «минус» — размер архива по сравнению с dt-шником: для базы в 2,3гб dt-шник 135мб, архив 7z 200мб.

    (5) wizarom, effector saver всё-таки платный при полном функционале.

    Reply
  10. Rauil

    Просто делюсь опытом: пользуюсь effector saver. Не полный функционал, но меня вполне устраивает. 7ку в dbf и sql копию делает на лету, без выкидывания юзеров. Недостатки SQL full backup стандартными средствами sql по сравнению с effector saver (ES):

    1. весит 7.7 Гб, а ES по расписанию (у меня ночью) залезает в SQL, делает тот же полный бэкап (поэтому с транзакциями порядок, если даже кто-то работает в 1С), бекап архивирует, добавляет туда md 23Мб,dds,dba. Архив получается 830 Мб.

    2. Средствами SQL муторно создавать задачи бэкапирования, если хочется сохранить ежедневные архивы, а не затирать их. ES добавляет дату и время в название файла, поэтому нет проблем.

    В обед и после рабочего дня дополнительно делаю дифференциальные бэкапы, уже средствами SQL

    —- 8ку тоже с помощью ES архивирую, но там еще опыта нет, не могу ничего сказать.

    —- У меня вопрос, давно уже беспокоит, может кто точно ответит. 7ка SQL версия. Как поведет себя 1С при восстановлении с архива, если md разные? Архивная md есть. Пробовал я из sql восстановить базу, прошло нормально. Затем из 1C пытался объединить конфигурации, не берет, ошибку выдает. Может просто скопировать md из архива, он же соответствует структуре баз? Что удивительно, запустил я 1С с не тем md-шником, запустился, и как будто не видит, что другой md, данные берет с баз, которые не соответствуют md. Пока тьфу-тьфу не было острой необходимости, а вдруг петух клюнет (((((

    Автору +, для себя извлек много полезной информации

    Reply
  11. i132

    для файлового варианта -чтобы не ждать пока сделает выгрузку проще скопировать базу в другую папку (база для архивирования) и уже там делать выгрузку — а пока выгружается уже можно заходить в рабочую.

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

    Reply
  12. АлексейН

    Классная идея реализации

    Reply
  13. valafan

    (11) i132, всё зависит от вашего понимания «просто». Если вы имеете ввиду (4), то я уже согласился в (9), если нет, то было бы интересно увидеть реализацию. Я же простоту вижу в достаточном прочтении описания (не скачивая вложенных файлов) и организации архивирования пользователю с минимальными начальными знаниями.

    Reply
  14. i132

    (13) реализацию пока не делал (надо часа 4, минимум 1.5часа) я писал о dt-архиве

    Reply
  15. SergeyD

    А что нибудь предусмотрено на случай когда главбух ночью восстанавливает последовательность, удаляет помеченные на удаление и т.п? При текущем раскладе утром она огорчиться… Или каждый раз она должна предупреждать, что хочет запустить тяжелый процесс на ночь?

    Reply
  16. SergeyD

    Не рассматривался вариант копирования самого 1Cv8.1CD, а потом архивации?

    Reply
  17. Anna_A

    Идея хорошая, но не новая, см.http://infostart.ru/public/63716/.

    Пользуюсь этим способом в серверном варианте базы, без обработок. Никаких доп.скриптов, только стандартные средства.

    Reply
  18. Mx00

    Выскажусь ещё раз

    главное в архивировании не создание архива, а уверенность, что у вас ЕСТЬ архивные копии

    все мнения о том, что «достаточно использовать стандартные средства windows» или простенький bat-файл отпадают по одной причине — вы не знаете создался у вас архив или нет, а проверять даже раз в неделю быстро надоедает и что там с архивированием ни кто не в курсе (и не надо думать, что вы не такой 🙂 )

    поэтому система архивирования должна сообщать ответственному о том что произошел сбой при архивации.

    после такой постановки здачи думаем и выбираем (или создаем) нормальную систему архивирования

    Удачи всем.

    Reply
  19. Maks_Payn

    Очень интересно и позновательно! Спасибо! ))

    Reply
  20. valafan

    (15) SergeyD, нет, не предусмотрено.

    (17) anna62, идеи похожи, но всё же разные. WinRar — средство нестандартное, к тому же платное. Плюс в результате имеем архивы разных форматов и размеров.

    Вообще способов архивирования достаточно много и выбор зависит от конкретной задачи. В моём случае имеются 3 небольших файловых базы, архив необходимо делать раз в неделю, сб-вск бухгалтерия не работает. Архивирование запускается в понедельник утром, поэтому даже если бухгалтер запустит что-то (а обычно об этом известно), то 2-х суток будет вполне достаточно, чтобы это что-то успело завершится. Формируется лог событий архивирования (если лень раз в неделю просматривать его самостоятельно, то можно аналогично добавить задачу на открытие в планировщик). Конечно, если условия изменятся, то я воспользуюсь более приемлемым вариантом, а пока, живя в пустыне, не вижу смысла страховаться от наводнения :).

    Reply
  21. Mx00

    я даже как-то плохо представляю как можно считать себя «живущим в пустыне» и НЕ делать ежедневные архивы

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

    Примите на себя обязанности ПРОФЕССИОНАЛА, а не простого исполнителя и сделайте СРАЗУ нормальную систему.

    я так посмотрел архивы у вас создаются на том же жестком диске, что и сама база, думаю вы понимаете, что при поломке жесткого диска все ваши архивы будут УТРАЧЕНЫ!!!

    З.Ы. всегда недолюбливал сисадминов, которых нужно убеждать делать ежедневные архивы. А уж когда приводят в качестве аргумента, что установлен RAID1 и в принципе ничего не может потеряться — сразу хочется предложить директору уволить такого сисадмина… «от греха подальше» 🙂

    Reply
  22. valafan

    (21) Mx00, очень просто, когда есть руководитель, который ясно дал понять, что нужны именно ЕЖЕНЕДЕЛЬНЫЕ архивы. Не хочу объяснять подробностей такого решения, просто скажу, что на то есть причины. Замечание по поводу жесткого диска принимаю (хотя это не проблема данного способа, достаточно изменить путь), в таком случае архивы следует дублировать как минимум на 2-х физически разных носителях. Надеюсь у вас так? (я без сарказма) Интересно, как хранят свои архивы, скажем, NASA? Уверен, вряд ли их устроит ваш способ. Всё это к тому, что каждый хранит свои данные исходя из возможностей и степени важности хранимой информации. И мы уже обсуждаем не конкретный способ, а саму политику организации хранения информации.

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

    Reply
  23. Mx00

    Ну если начальник сказал — тут вопросов нет 🙂

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

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

    Reply
  24. and_r

    Спасибо автору за подробное описание метода, просто и функционально, планирую использовать!

    Reply
  25. rumik007

    для клиент-серверного варианта в батнике надо заменить строку /F»D:Base» на /SIP_ИЛИ_ИМЯ_СЕРВЕРАИМЯ_БД

    Reply
  26. kykysk

    лучше СУБД использовать. А именно SQL .ПО мне он надежнее

    Reply
  27. Mx00

    (26) задачи разные бывают — у меня клиенты «секретные» базы хранят на флешках и SSD накопителях 🙂

    Reply
  28. andru_dv

    Спасибо за простоту изложения.

    Планирую использовать в ближайшее время для файлового и клиент-серверного варианта.

    Ставлю плюс.

    Reply
  29. solarstrike

    Очень актуальная информация.

    Reply
  30. Nelli_A86

    Есть программка бесплатная Резервные копии для 1С, для файловых баз очень удобно

    Reply
  31. PelixM

    На самом деле, если речь идет о терминалке(Терминальном сервере) или, скажем, другой операционке(В случае с линуксом) использовать дополнительный софт я бы не стал. Планировщик заданий отлично справляется. Я бы дополнил данный скрипт еще архивацией файла выгрузки и установкой пароля на этот архив. А еще можно было бы писать сразу на болванку, установленную с утра в резак сервера. 🙂

    Reply
  32. Dexxxxer

    Очень удобно. Бывает забываешь сделать резервное копирование, а тут все на автомат поставил))

    Reply
  33. Mx00

    (31) PelixM, если ты каждый день с утра подходишь к серверу, то это «диагноз» ИМХО

    Reply
  34. Foximus

    Очень много комментов. А всё же чем она лучше Эффектора. Он ещё ни разу не подвёл. Жаль выгонять юзеров умеет только в платной версии )

    Reply
  35. valafan

    (34) вот ты на свой вопрос сам и ответил. а вообще иногда бывает полезным читать эти самые комменты, про эффектор в (9)

    Reply
  36. JamilRG

    Спасибо!

    Reply
  37. Deniz200

    Впринципе не плохо, единственное что добавлять в конфу кусок надо, да и архивировать нужно куда -нибудь в сеть, а не на локальный диск. А вообще самое просто, это предупредить пользователь что ночью допустим база будет закрываться(чтобы не было потом претензий что документы были открыты и не сохранились) и убивать целиком процесс 1С. Затем тупо архиватором архивировать файл 1Cv8.cd. Или опять же батниками через планировщик.

    Reply
  38. valafan

    (37) в конфу ничего добавлять не нужно, используется внешняя обработка. остальное уже обсуждалось, читайте описание и комментарии.

    Reply
  39. Dethmond

    Нужная вещь, как раз думал как бы у себя это реализовать.

    Reply
  40. maksimkonkov

    копирование базы у себя делаю через SQL. раньше с помощью effector saver. Вот именно его и рекомендую. просто, надежно и эффективно. и париться много не надо. а по поводу объявления о резервном копировании — это как мне кажется перебор. копировать можно легко и без отрыва от производства.

    Reply
  41. Serg_F1

    Мне кажется что существуют куча других программ которые все это делают автоматически причем совершенно бесплатно. один из примеров Egida bakup. работает на всех конфигурациях, на всех платформах и на всех версиях))

    Reply
  42. haous

    Для SQL варианта использую встроенное резервирование БД. А для файлового варианта CobianBackup и доволен на все 100

    Reply
  43. Anton_prezident

    Использую резервирование базы средствами MS SQL servera и доволен

    Reply
  44. Программулькин

    Решение хорошее. Имеет право на существование. Имеет Ряд минусов плюсов. Жирный Минус — это Необходимость всех выгонять, а значит копии делать ночью, или в обед, в то время как скуль может во время работы юзеров бекапится, например — каждый час. Плюс — мы имеем готовенький *.DT-шник, Няя :), ну это на случай падения скуля и отсутствие 2го, резервного скуля на резервном сервере. В общем для серверных баз можно пользовать эту идею, как защиту от падения скуля:)

    Reply
  45. Pretender195

    Думал писать сам, но подвернулось и использую

    Reply
  46. Вася_Пупкин

    Давно пытался найти что то подобное, 7-ку быкапил просто раром через .bat со спском необходимых файлов по маске.

    Когда перешли на 8-ку просто не знал что делать (тем более база в файловом варианте, не SQL), рар жмёт плохо. Так что это вариант мне очень помог. Скажите есть смыс переходить с этого варианта на другое ПО (effector saver, CobianBackup) которое здесь обсуждается, и если да то на какое?

    Reply
  47. PelixM

    Лично я придерживаюсь такой позиции: чем меньше софта стоит на сервере — тем лучше он себя чувствует.

    У меня схема такая.

    Запускается батник, пишет в лог что запустился

    Тушит все имеющиеся процессы 1С.

    Выгружает конфу полностью в папочку

    7зипом архивирую файл выгрузки и лог файл, ставлю пароль

    Переношу в отдельную папочку с бэкапами и даю имя по дате архива

    Недостает в этой схеме только: нежной выгонялки пользователей, предварительного тестирования и исправление с реиндексацией перед выгрузкой.

    60 гб архивов(по 250+- каждый), ни единого сбоя. Время начала и завершения со всеми промежутками в логфайле. Что еще нужно?

    Reply
  48. valafan

    (46), это уже на ваше усмотрение. Вообще effector (http://effector.com.ua/) специально сделана для автобэкапа баз 1С и, думаю, будет лучше использовать её, вот только в бесплатной версии отсутствует «выгонялка» пользователей, что есть существенный минус. С другой стороны полный функционал стоит 30$, что не так уж и много. Cobian (http://www.cobiansoft.com/cobianbackup.htm) же бесплатен и может делать архивы даже открытых баз, вот только на выходе имеем не стандартный dt-шник, а базу в 7z либо rar (статья по использованию cobian http://infostart.ru/public/63970/).

    Reply
  49. Mx00

    (47) PelixM,

    По поводу «Что ещё нужно?» — а нужно ещё оповещение в случае ошибки создания архива. ИМХО без такого оповещения любая система архивировния не гарантирует, что у вас есть последняя архивная копия.

    Reply
  50. Вася_Пупкин

    (48) спасибо за ответ. Возникла такая проблема. Настроил оба .bat’ника по данному методу. После двух дней успешной работы (бэкап два раза в сутки в 12.00 и 00.00) решил попробовать загрузиться из бэкапа. Создаю новую базу в 1с8.2 ->Конфигуратор -> Администрирование -> Востановить информационную базу -> .dt’шник

    И потом прерывается на загрузке, пишет «Не все данные были загружены» и база не работает. Я думаю что проблема не в данном методе. Куда копать?

    Reply
  51. Вася_Пупкин

    Я знаю что вопрос не совсем в тему. Может кто знает. Сейчас у меня файловый вариант базы. Система терминалов. Server 2008 x64. Есть прошлый сервер хочу на нём поднять Линукс сервак, SQL, базу тоже перевести на SQL. И ещё на клиент — серверную версию. Лицензия на сервер 1С есть. Кто подскажет с чего начать? Может есть полезные ссылки, чтоб поэтапно =) Никогда с SQL не работал. С линукс серверами опыт работы был. С почтовым и прокси сервером линукс (небольшим, в маленком офисе.) Может кто переходил на такое?

    Reply
  52. valafan

    (50), чтобы наверняка исключить данный метод, сделайте архив ручками. Если история повторится, то, скорее всего, база повреждена. Если так, то архивы делать архивированием папки целиком (как раз подойдет cobian). И, конечно, проверить базу на ошибки. Может ещё дело в платформе, на 8.2.14.540 такой проблемы не возникало.

    Reply
  53. Вася_Пупкин

    (52) да всё проверил. Дело было в базе — были ошибки. Провел весь комплекс начал с (chdbfl.exe — стандартное средство 1С 8.* лежит в папке bin) «Проверка физической целостности файла БД» (исправил найденные ошибки) и всё заработало! =) Ну и на всякий и логическое и целостность и т.д

    Всё же очень задумался над SQL версией базы.

    Спасибо за совет.

    Reply
  54. PelixM

    (49) Mx00, согласен, но частично. У меня от чего-то есть привычка: каждый вечер просматривать логи, и лог выгрузки смотрю в том числе. Хотя прилепить туда оповещение об успешности выгрузки будет совсем не трудно. Хм, дпишу до идеала — выложу 🙂

    Reply
  55. Mx00

    (54) PelixM, «есть привычка: каждый вечер просматривать логи» — это лишь говорит о том, что у вас куча свободного времени 🙂

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

    Reply
  56. lusefer

    CobianBackup устраивает по поводу комментарий при держусь что каждому свое и каждый сам выбирает как часто ему делать быкапы

    Reply
  57. bolush

    вооще класс, респек автору за подробное описание метода, просто и функционально, планирую использовать.

    Reply
  58. serrj_dream

    использую psBackup_3 нормально работает с 8.1 8.2

    Reply
  59. AnKonAlm

    Я реализовал с некоторыми доработками под себя!!!

    Спасибо, идея отличная!!!

    Reply
  60. Konder.Djironimo

    Использовал Effector saver но! Эта идейка понравилась (Самое сложное в простом) Глянем! Спасибо!

    Reply
  61. Konder.Djironimo

    Да вот вспомнил говорят тоже не плохая прога но сам не юзал «Handy Backup»

    Reply
  62. OscarTT

    «CobianBackup устраивает по поводу комментарий при держусь что каждому свое и каждый сам выбирает как часто ему делать быкапы»

    +100. Очень часто необходимо кроме архивирования выполнять и сопутствующие действия: удалить старые архивы, послать сообщения, сделать еще одну копия на фтп и.т.д. Можно конечно и в батник все это прописать, но будет ли это проще?

    Reply
  63. wes1977

    странно — столько комментариев, и ни слова про программу «хранитель» от Гендальфа. не шибко дорого, но достаточно сердито.

    Reply
  64. electronik

    Интересно интересно появятся день=ги обязательно скачаю. Отзиви неоднозначние.Протестирую отпишусь.Автору спасибо за труд так держать

    Reply
  65. Totoro

    Можно еще PowerShell использовать. Там возможностей побольше будет.

    + из бесплатных CobianBackup

    Reply
  66. Boom2005

    Очень много полезных программ нашел, будем пробовать, спасибо всем!

    Reply
  67. olsy

    Отличная статья! Наконец-то увидел внятный совет установить блокировку перед тем как сделать ЗавершитьРаботуПользователей. Нигде это больше не упоминалось!

    Единственное замечание:

    «Сохраним как backup81.dat» — надо не dat, а bat.

    Работает на клиент-сервере УПП.

    Reply
  68. olsy

    Мдаа… Я тут несколько поспешил… «Выгонялка»-то работает, но вот выгрузка в батнике запускается одновременно с выгонялкой и сразу ругается, что в базе есть и юзеры и «Одмин», под которым запустилась выгонялка. Придётся разнести по времени эти два действия в планировщике, потому что в батнике с использованием start /wait что-то не получается.

    И вопрос возник — можно ли сделать так, чтоб завершённые сеансы заново не запускались?

    Reply
  69. valafan

    (69) olsy, хз почему так, у меня выгрузка в батнике запускается только после завершения работы «выгонялки»

    Reply
  70. Nata

    Спасибо. Попробуем

    Reply

Leave a Comment

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