Недавно столкнулся с необходимостью создания резервных копий баз (файловый вариант, архивы в виде 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, как работает на клиент-серверных не знаю.
Удачная идея и реализация.
может проще sql настроить
(2) anna_irk, не думаю, базы файловые
проще использовать CobianBackup
бесплатен
позволяет копировать открытые базы (использует теневое копирование)
и много прочего позволяет делать
+1 За CobianBackup
от себя еще посоветую effector saver, бекапит 1с-ки в любом виде
Для файловых баз — удачное решение. Но для серверных нужно изменить параметры запуска 1С, если пользоваться данной методикой, хотя сама 1С рекомендует пользоваться средствами сервера базы данных .
(4) Mx00, прикольно будет потом пытаться использовать такой бэкап, если в момент теневого копирования кто-то другой совершал транзакцию…
(7) rus128, это говорит только о том, что ты ничего не понимаешь в теневом копировании 🙂
(4) Mx00, CobianBackup действительно +1, если бы нашел твою публикацию раньше, то наверняка бэкапил бы им. Единственный «минус» — размер архива по сравнению с dt-шником: для базы в 2,3гб dt-шник 135мб, архив 7z 200мб.
(5) wizarom, effector saver всё-таки платный при полном функционале.
Просто делюсь опытом: пользуюсь 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. Пока тьфу-тьфу не было острой необходимости, а вдруг петух клюнет (((((
Автору +, для себя извлек много полезной информации
для файлового варианта -чтобы не ждать пока сделает выгрузку проще скопировать базу в другую папку (база для архивирования) и уже там делать выгрузку — а пока выгружается уже можно заходить в рабочую.
Можно поступить еще лучше -не выгонять всех из базы а просто запретить запись и проведение (обработчиками при записи) и спокойно копировать рабочую базу в папку для архивирования.
Классная идея реализации
(11) i132, всё зависит от вашего понимания «просто». Если вы имеете ввиду (4), то я уже согласился в (9), если нет, то было бы интересно увидеть реализацию. Я же простоту вижу в достаточном прочтении описания (не скачивая вложенных файлов) и организации архивирования пользователю с минимальными начальными знаниями.
(13) реализацию пока не делал (надо часа 4, минимум 1.5часа) я писал о dt-архиве
А что нибудь предусмотрено на случай когда главбух ночью восстанавливает последовательность, удаляет помеченные на удаление и т.п? При текущем раскладе утром она огорчиться… Или каждый раз она должна предупреждать, что хочет запустить тяжелый процесс на ночь?
Не рассматривался вариант копирования самого 1Cv8.1CD, а потом архивации?
Идея хорошая, но не новая, см.http://infostart.ru/public/63716/ .
Пользуюсь этим способом в серверном варианте базы, без обработок. Никаких доп.скриптов, только стандартные средства.
Выскажусь ещё раз
главное в архивировании не создание архива, а уверенность, что у вас ЕСТЬ архивные копии
все мнения о том, что «достаточно использовать стандартные средства windows» или простенький bat-файл отпадают по одной причине — вы не знаете создался у вас архив или нет, а проверять даже раз в неделю быстро надоедает и что там с архивированием ни кто не в курсе (и не надо думать, что вы не такой 🙂 )
поэтому система архивирования должна сообщать ответственному о том что произошел сбой при архивации.
после такой постановки здачи думаем и выбираем (или создаем) нормальную систему архивирования
Удачи всем.
Очень интересно и позновательно! Спасибо! ))
(15) SergeyD, нет, не предусмотрено.
(17) anna62, идеи похожи, но всё же разные. WinRar — средство нестандартное, к тому же платное. Плюс в результате имеем архивы разных форматов и размеров.
Вообще способов архивирования достаточно много и выбор зависит от конкретной задачи. В моём случае имеются 3 небольших файловых базы, архив необходимо делать раз в неделю, сб-вск бухгалтерия не работает. Архивирование запускается в понедельник утром, поэтому даже если бухгалтер запустит что-то (а обычно об этом известно), то 2-х суток будет вполне достаточно, чтобы это что-то успело завершится. Формируется лог событий архивирования (если лень раз в неделю просматривать его самостоятельно, то можно аналогично добавить задачу на открытие в планировщик). Конечно, если условия изменятся, то я воспользуюсь более приемлемым вариантом, а пока, живя в пустыне, не вижу смысла страховаться от наводнения :).
я даже как-то плохо представляю как можно считать себя «живущим в пустыне» и НЕ делать ежедневные архивы
у вас бухгалтер приходит на работу раз в неделю в пятницу? или бухгалтер осознано вам дал понять что будет с удовольствием руками восстанавливать данные за неделю если база поломается?
Примите на себя обязанности ПРОФЕССИОНАЛА, а не простого исполнителя и сделайте СРАЗУ нормальную систему.
я так посмотрел архивы у вас создаются на том же жестком диске, что и сама база, думаю вы понимаете, что при поломке жесткого диска все ваши архивы будут УТРАЧЕНЫ!!!
З.Ы. всегда недолюбливал сисадминов, которых нужно убеждать делать ежедневные архивы. А уж когда приводят в качестве аргумента, что установлен RAID1 и в принципе ничего не может потеряться — сразу хочется предложить директору уволить такого сисадмина… «от греха подальше» 🙂
(21) Mx00, очень просто, когда есть руководитель, который ясно дал понять, что нужны именно ЕЖЕНЕДЕЛЬНЫЕ архивы. Не хочу объяснять подробностей такого решения, просто скажу, что на то есть причины. Замечание по поводу жесткого диска принимаю (хотя это не проблема данного способа, достаточно изменить путь), в таком случае архивы следует дублировать как минимум на 2-х физически разных носителях. Надеюсь у вас так? (я без сарказма) Интересно, как хранят свои архивы, скажем, NASA? Уверен, вряд ли их устроит ваш способ. Всё это к тому, что каждый хранит свои данные исходя из возможностей и степени важности хранимой информации. И мы уже обсуждаем не конкретный способ, а саму политику организации хранения информации.
В целом же с вами согласен и данный способ не претендует на функциональность и универсальность, а является лишь одним из вариантом решения частной, но весьма распространенной задачи и выложен с целью «посмотрите, может кому пригодиться». И как видно по некоторым отзывам не зря.
Ну если начальник сказал — тут вопросов нет 🙂
По поводу того как у меня: я приходящий одинэсник и реализация у каждого клиента своя, я только убеждаю сделать ежедневные архивы на другой жесткий диск, если компьютер один, то покупается usb-диск или флешка и архивы делаются на него. Если потеря данных критична, то делается несколько копий в день (и не важно, что база может быть сбойная, лучше иметь такую, чем никакой) если есть возможность то архивы делаются на другой компьютер, сетевой диск или на ftp server за пределами офиса.
про NASA разговор беспредметный, но думаю там тоже бакапирование происходит не реже раза в день на другой физический носитель.
Спасибо автору за подробное описание метода, просто и функционально, планирую использовать!
для клиент-серверного варианта в батнике надо заменить строку /F»D:Base» на /SIP_ИЛИ_ИМЯ_СЕРВЕРАИМЯ_БД
лучше СУБД использовать. А именно SQL .ПО мне он надежнее
(26) задачи разные бывают — у меня клиенты «секретные» базы хранят на флешках и SSD накопителях 🙂
Спасибо за простоту изложения.
Планирую использовать в ближайшее время для файлового и клиент-серверного варианта.
Ставлю плюс.
Очень актуальная информация.
Есть программка бесплатная Резервные копии для 1С, для файловых баз очень удобно
На самом деле, если речь идет о терминалке(Терминальном сервере) или, скажем, другой операционке(В случае с линуксом) использовать дополнительный софт я бы не стал. Планировщик заданий отлично справляется. Я бы дополнил данный скрипт еще архивацией файла выгрузки и установкой пароля на этот архив. А еще можно было бы писать сразу на болванку, установленную с утра в резак сервера. 🙂
Очень удобно. Бывает забываешь сделать резервное копирование, а тут все на автомат поставил))
(31) PelixM, если ты каждый день с утра подходишь к серверу, то это «диагноз» ИМХО
Очень много комментов. А всё же чем она лучше Эффектора. Он ещё ни разу не подвёл. Жаль выгонять юзеров умеет только в платной версии )
(34) вот ты на свой вопрос сам и ответил. а вообще иногда бывает полезным читать эти самые комменты, про эффектор в (9)
Спасибо!
Впринципе не плохо, единственное что добавлять в конфу кусок надо, да и архивировать нужно куда -нибудь в сеть, а не на локальный диск. А вообще самое просто, это предупредить пользователь что ночью допустим база будет закрываться(чтобы не было потом претензий что документы были открыты и не сохранились) и убивать целиком процесс 1С. Затем тупо архиватором архивировать файл 1Cv8.cd. Или опять же батниками через планировщик.
(37) в конфу ничего добавлять не нужно, используется внешняя обработка. остальное уже обсуждалось, читайте описание и комментарии.
Нужная вещь, как раз думал как бы у себя это реализовать.
копирование базы у себя делаю через SQL. раньше с помощью effector saver. Вот именно его и рекомендую. просто, надежно и эффективно. и париться много не надо. а по поводу объявления о резервном копировании — это как мне кажется перебор. копировать можно легко и без отрыва от производства.
Мне кажется что существуют куча других программ которые все это делают автоматически причем совершенно бесплатно. один из примеров Egida bakup. работает на всех конфигурациях, на всех платформах и на всех версиях))
Для SQL варианта использую встроенное резервирование БД. А для файлового варианта CobianBackup и доволен на все 100
Использую резервирование базы средствами MS SQL servera и доволен
Решение хорошее. Имеет право на существование. Имеет Ряд минусов плюсов. Жирный Минус — это Необходимость всех выгонять, а значит копии делать ночью, или в обед, в то время как скуль может во время работы юзеров бекапится, например — каждый час. Плюс — мы имеем готовенький *.DT-шник, Няя :), ну это на случай падения скуля и отсутствие 2го, резервного скуля на резервном сервере. В общем для серверных баз можно пользовать эту идею, как защиту от падения скуля:)
Думал писать сам, но подвернулось и использую
Давно пытался найти что то подобное, 7-ку быкапил просто раром через .bat со спском необходимых файлов по маске.
Когда перешли на 8-ку просто не знал что делать (тем более база в файловом варианте, не SQL), рар жмёт плохо. Так что это вариант мне очень помог. Скажите есть смыс переходить с этого варианта на другое ПО (effector saver, CobianBackup) которое здесь обсуждается, и если да то на какое?
Лично я придерживаюсь такой позиции: чем меньше софта стоит на сервере — тем лучше он себя чувствует.
У меня схема такая.
Запускается батник, пишет в лог что запустился
Тушит все имеющиеся процессы 1С.
Выгружает конфу полностью в папочку
7зипом архивирую файл выгрузки и лог файл, ставлю пароль
Переношу в отдельную папочку с бэкапами и даю имя по дате архива
Недостает в этой схеме только: нежной выгонялки пользователей, предварительного тестирования и исправление с реиндексацией перед выгрузкой.
60 гб архивов(по 250+- каждый), ни единого сбоя. Время начала и завершения со всеми промежутками в логфайле. Что еще нужно?
(46), это уже на ваше усмотрение. Вообще effector (http://effector.com.ua/) специально сделана для автобэкапа баз 1С и, думаю, будет лучше использовать её, вот только в бесплатной версии отсутствует «выгонялка» пользователей, что есть существенный минус. С другой стороны полный функционал стоит 30$, что не так уж и много. Cobian (http://www.cobiansoft.com/cobianbackup.htm) же бесплатен и может делать архивы даже открытых баз, вот только на выходе имеем не стандартный dt-шник, а базу в 7z либо rar (статья по использованию cobian http://infostart.ru/public/63970/) .
(47) PelixM,
По поводу «Что ещё нужно?» — а нужно ещё оповещение в случае ошибки создания архива. ИМХО без такого оповещения любая система архивировния не гарантирует, что у вас есть последняя архивная копия.
(48) спасибо за ответ. Возникла такая проблема. Настроил оба .bat’ника по данному методу. После двух дней успешной работы (бэкап два раза в сутки в 12.00 и 00.00) решил попробовать загрузиться из бэкапа. Создаю новую базу в 1с8.2 ->Конфигуратор -> Администрирование -> Востановить информационную базу -> .dt’шник
И потом прерывается на загрузке, пишет «Не все данные были загружены» и база не работает. Я думаю что проблема не в данном методе. Куда копать?
Я знаю что вопрос не совсем в тему. Может кто знает. Сейчас у меня файловый вариант базы. Система терминалов. Server 2008 x64. Есть прошлый сервер хочу на нём поднять Линукс сервак, SQL, базу тоже перевести на SQL. И ещё на клиент — серверную версию. Лицензия на сервер 1С есть. Кто подскажет с чего начать? Может есть полезные ссылки, чтоб поэтапно =) Никогда с SQL не работал. С линукс серверами опыт работы был. С почтовым и прокси сервером линукс (небольшим, в маленком офисе.) Может кто переходил на такое?
(50), чтобы наверняка исключить данный метод, сделайте архив ручками. Если история повторится, то, скорее всего, база повреждена. Если так, то архивы делать архивированием папки целиком (как раз подойдет cobian). И, конечно, проверить базу на ошибки. Может ещё дело в платформе, на 8.2.14.540 такой проблемы не возникало.
(52) да всё проверил. Дело было в базе — были ошибки. Провел весь комплекс начал с (chdbfl.exe — стандартное средство 1С 8.* лежит в папке bin) «Проверка физической целостности файла БД» (исправил найденные ошибки) и всё заработало! =) Ну и на всякий и логическое и целостность и т.д
Всё же очень задумался над SQL версией базы.
Спасибо за совет.
(49) Mx00, согласен, но частично. У меня от чего-то есть привычка: каждый вечер просматривать логи, и лог выгрузки смотрю в том числе. Хотя прилепить туда оповещение об успешности выгрузки будет совсем не трудно. Хм, дпишу до идеала — выложу 🙂
(54) PelixM, «есть привычка: каждый вечер просматривать логи» — это лишь говорит о том, что у вас куча свободного времени 🙂
но есть период отпуска, болезни и прочее, и сисадмины уходят на другую работу, да мало ли что бывает…
CobianBackup устраивает по поводу комментарий при держусь что каждому свое и каждый сам выбирает как часто ему делать быкапы
вооще класс, респек автору за подробное описание метода, просто и функционально, планирую использовать.
использую psBackup_3 нормально работает с 8.1 8.2
Я реализовал с некоторыми доработками под себя!!!
Спасибо, идея отличная!!!
Использовал Effector saver но! Эта идейка понравилась (Самое сложное в простом) Глянем! Спасибо!
Да вот вспомнил говорят тоже не плохая прога но сам не юзал «Handy Backup»
«CobianBackup устраивает по поводу комментарий при держусь что каждому свое и каждый сам выбирает как часто ему делать быкапы»
+100. Очень часто необходимо кроме архивирования выполнять и сопутствующие действия: удалить старые архивы, послать сообщения, сделать еще одну копия на фтп и.т.д. Можно конечно и в батник все это прописать, но будет ли это проще?
странно — столько комментариев, и ни слова про программу «хранитель» от Гендальфа. не шибко дорого, но достаточно сердито.
Интересно интересно появятся день=ги обязательно скачаю. Отзиви неоднозначние.Протестирую отпишусь.Автору спасибо за труд так держать
Можно еще PowerShell использовать. Там возможностей побольше будет.
+ из бесплатных CobianBackup
Очень много полезных программ нашел, будем пробовать, спасибо всем!
Отличная статья! Наконец-то увидел внятный совет установить блокировку перед тем как сделать ЗавершитьРаботуПользователей. Нигде это больше не упоминалось!
Единственное замечание:
«Сохраним как backup81.dat» — надо не dat, а bat.
Работает на клиент-сервере УПП.
Мдаа… Я тут несколько поспешил… «Выгонялка»-то работает, но вот выгрузка в батнике запускается одновременно с выгонялкой и сразу ругается, что в базе есть и юзеры и «Одмин», под которым запустилась выгонялка. Придётся разнести по времени эти два действия в планировщике, потому что в батнике с использованием start /wait что-то не получается.
И вопрос возник — можно ли сделать так, чтоб завершённые сеансы заново не запускались?
(69) olsy, хз почему так, у меня выгрузка в батнике запускается только после завершения работы «выгонялки»
Спасибо. Попробуем