Конфигурация для автоматизации бэкапов

23.01.15

База данных - Архивирование (backup)

Конфигурация для организации резервного копирования и хранения бэкапов информационных баз во внутреннем формате 1С *.dt

Скачать файлы

Наименование Файл Версия Размер
BackUpConf
.cf 268,98Kb
115
.cf 268,98Kb 115 Скачать
BackUpConf_8(23)Ed
.cf 269,90Kb
67
.cf 1.02 269,90Kb 67 Скачать

Столкнулся недавно с необходимостью администрировать сервер 1С. После того, как поднял и развернул базы, задался вопросами резервных копий. И вот здесь Инфостарт предложил просто море вариантов, но все они по тем или иным причинам не подошли... А может быть, я плохо искал и наваял очередной баян:(

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

Почему так сложно и не ограничился простой обработкой? Хотелось гибко управлять свойствами бэкапов, расписаниями выгрузок, правилами хранения, серверами, кластерами, базами и самое главное - мимо всяких шедулеров воспользоваться фоновыми заданиями самого 1С сервера.

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

К нстоящему времени серверная версия работает уже без малого 3 месяца, и баги достаточно придавлены. Недели 3 уже я туда не совался, а новые выгрузки исправно делаются, и старые нормально удаляются по правилам. Файловый вариант в силу его практической ненадобности я потестил денек, но боюсь, что за недостатком времени какие-то функции все-таки не дотестил и какие-то ситуации не прогнал.

Да и сама работа в файловом варианте не столь удобна, так как связана с обработчиком ожидания, а, следовательно, требует постоянно открытого клиента предприятия. С другой стороны, не серверные варианты работы все  еще популярны и потратить несколько часов свободного времени на благо файловых пользователей я счел не лишним.  Потратить времени больше не смог (не захотел и т.д.), так что не обижайтесь, если что:)

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

Вопросы и пожелания прошу в комменты и в личку.

UP: Вариант 8(23) проверен на совместимость с 8.2 и 8.3. Не заменил изначальную версию потому, что пришлось добавить кучу костылей, а функциональность не изменилась совершенно. Код стал сложнее и тяжелее и я не вижу смысла использовать это решение на 8.3 когда есть оптимизировання версия. Также первоначальная версия может работать в немодальном режиме. Для экономии $m и имея 2 платформы для 8.3 можно использовать вторую версию, а если у Вас 8.3 в чистом виде, то лучше первоначальная.

бэкап резервное копирование выгрузка информационной базы *.dt

См. также

Журнал изменений с восстановлением состояния ссылочных объектов и архивацией по HTTP / COM (расширение + конфигурация, 8.3.14+, ЛЮБАЯ конфигурация)

Архивирование (backup) Журнал регистрации Поиск данных Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

База данных «сама» меняет данные в документах/справочниках? Тогда данный журнал изменений для Вас! Практически не влияет на скорость записи объектов за счет быстрого алгоритма! Скорость работы почти в 2 раза выше типового механизма "История изменений"! Позволяет следить за изменениями и удалением в любых ссылочных объектах конфигурации, с возможностью архивации по HTTP(!) или COM, и сверткой данных. А так же, может восстановить состояние реквизитов (значения) до момента изменения или удаления объекта из базы. Есть ДЕМО-база где можно самостоятельно протестировать часть функционала! Работает на любых платформах выше 8.3.14+ и любых конфигурациях! Версия 3.1 от 24.08.2023!

19200 руб.

15.05.2017    42470    10    24    

38

BackUPv8 - система резервного копирования баз 1С

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Автоматическое создание копий файловых и серверных информационных баз 1С Предприятие 8 и размещение копий в облаке Яндекс.Диск, локальном или сетевом ресурсе.

1200 руб.

03.09.2014    14671    12    6    

17

Резервное копирование журнала транзакций, наконец-то!

Архивирование (backup) Администрирование СУБД Россия Бесплатно (free)

Постараюсь объяснить, зачем нужно резервное копирование именно журнала транзакций, а не только базы данных, и почему я словно сбросил груз, настроив его - как, покажу, естественно. Кстати, будут скрипты T-SQL (с подробными комментариями) - отличный способ сделать администрирование базы более уютным.

04.12.2023    5704    n_mezentsev    15    

23

Резервное копирование и восстановление 1С баз на PostgreSQL в Windows с помощью pgAdmin, bat-файлов и планировщика

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данной инструкции будет описано, как с помощью pgAdmin, bat-файлов и планировщика заданий Windows организовать резервное копирование, восстановление и хранение копий баз данных.

07.10.2022    19481    sapervodichka    36    

140

Архивирование базы в dt и дамп postgres

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Захотелось клиентам выгрузку архива баз, и выгрузку в дт, готовые скрипты с сети не заработали. Может, кому-то поможет. Релиз 8.3.18.1741.

1 стартмани

25.08.2022    4679    2    Gnom-Gluck    6    

6

Утилита копирования баз данных 1С

Архивирование (backup) Платформа 1С v8.3 Абонемент ($m)

Небольшая утилита для копирования файловых баз данных 1С.

1 стартмани

02.06.2022    4216    3    Giblarium    12    

5
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. qwinter 671 24.01.15 09:30 Сейчас в теме
Конфигурация отключает пользователей и устанавливает блокировку сеансов перед началом выгрузки?
2. dusha0020 1103 24.01.15 11:35 Сейчас в теме
(1) qwinter, да, конечно. Если конфа стандартная сначала пробует стандартные средства, если после периода ожидания (он настраивается в правилах выгрузки) база не освободилась то для серверных баз разрываются соединения с сервером. Для файловых - ничего не сделать, пойдёт новая попытка в новом фоновом задании. Так что файловые базы без гарантии.
21. TMV 14 31.03.15 07:12 Сейчас в теме
(2) если архивируемая база на sql и при этом нет галки "стандартная", то никаких блокировок не устанавливается - бэкап не делается.
22. dusha0020 1103 31.03.15 11:06 Сейчас в теме
(21) TMV, Спасибо за замечание. Сейчас нет времени разбираться с причинами. Флаг "Стандартная" означает лишь то, что перед жестким отключением от 1С сервера буде предпринята попытка разослать оповещение стандартным механизмом. То есть можете его ставить смело и для "нестандартных" конфигураций баз. А когда исправлю данную проблему отпишусь дополнительно и обновлю публикацию.
23. dusha0020 1103 31.03.15 12:14 Сейчас в теме
(21) TMV, Знаете, как и предполагалось, выгрузка работает и без галочки "стандартная конфигурация". Только что проверил. Советую проверить введены ли у Вас (и правильно ли) имя пользователя и пароль юзера имеющего права на установку блокировки (как правило администратора). Это в общем-то первая и очевидная причина почему выгрузка не срабатывает.
24. TMV 14 01.04.15 15:15 Сейчас в теме
(23) неверно. У меня регл.задания работают, а у вас выгрузка начинается только при следующей итерации цикла, а не сразу после отключения сеансов. дело в том, что блокировку вы не устанавливаете.
25. dusha0020 1103 02.04.15 09:28 Сейчас в теме
(24) TMV, Честно говоря, не понял Вас. Выгрузка начинается не после отключения сеансов (команды на отключение), а после того как все сеансы будут реально отключены. Так как способы отключения разные: где-то пользователям предлагается выйти стандартными оповещениями, где-то идет команда серверу на завершение сеансов и т.д. В данном случае, когда высвобождение баз происходит не непосредственно в результате команды кода фоновой процедуры, а во вне этой процедуры (пользователями или сервером 1С) я счел вполне логичным и правильным рассылать такие требования на завершение сеансов во вне, а потом дожидаться их исполнения, проверяя высвобождение баз в некотором цикле. Имхо, такой подход вполне оправдан. С другой стороны если даже нам не удается дождаться завершения сеансов в текущей процедуре, то можно установить период болокировки базы в правилах выгрузки. То есть если в текущем задании освободить базы не удалось, то все равно устанавливается блокировка, период которой можно настроить так, чтобы она длилась между вызовами фоновой процедуры выгрузки и к новой попытке выгрузиться база была гарантированно свободной благодаря все еще длящейся блокировке.
И вот здесь я Вас и не понял. Вы предлагаете изменить логику исполнения задачи... Но как будет правильнее? Я изложил как мог свое видение алгоритма. Давайте обсудим Ваш если хотите. Но дайте немного подробностей:)
26. TMV 14 02.04.15 17:08 Сейчас в теме
(25) Мне кажется вы не поняли о чем речь. Вот кусок кода, о котором говорю:
	Пока ОкончаниеВыполненияЗадания > ТекущаяДата() Цикл //Внешний цикл. Попытки и ожидания блокировок
		Для Каждого Задание Из мЗаданий Цикл
			Если НЕ Задание.ОжиданиеБлокировкиВключено И УправлениеБлокировками.НаличиеСеансовПредприятия(Задание.ИнформационнаяБаза) Тогда
				Если Задание.ИнформационнаяБаза.СтандартнаяКонфигурация Тогда
					Рез = Ложь;
					УправлениеБлокировками.ВыполнитьОтключениеПользователейСтандартнойКонфигурации(Задание.ИнформационнаяБаза, Задание.ПравилоРазмещения, Рез);
					Если НЕ Рез Тогда
						УправлениеБлокировками.ПринудительнаяБлокировкаФайловойБазы(Задание.ИнформационнаяБаза, Задание.ПравилоРазмещения);
					КонецЕсли;
					УстановитьПериодОжиданияБлокировки(Задание);
				ИначеЕсли Задание.ИнформационнаяБаза.Файловая Тогда
					УправлениеБлокировками.ПринудительнаяБлокировкаФайловойБазы(Задание.ИнформационнаяБаза, Задание.ПравилоРазмещения);
					УстановитьПериодОжиданияБлокировки(Задание,Истина);
				Иначе
					//итерация 1
					УстановитьПериодОжиданияБлокировки(Задание);
				КонецЕсли;
				Задание.ОжиданиеБлокировкиВключено = Истина;
			Иначе
				Если УправлениеБлокировками.НаличиеСеансовПредприятия(Задание.ИнформационнаяБаза) И НЕ Задание.ВыгрузкаНачата = 1 Тогда
					Если НЕ ОжидатьБлокировкуБазыПоЗаданию(Задание) И НЕ Задание.ИнформационнаяБаза.Файловая тогда
						//итерация 2
						Сервер1С.ЗавершитьСеансы(Задание.ИнформационнаяБаза, Задание.ПравилоРазмещения.БлокироватьСеансы);
						Пауза(8000);
					КонецЕсли;
				ИначеЕсли Задание.ВыгрузкаНачата = 0 Тогда
					//итерация 3
					ИмяФайлаВыгрузки = "";
					WShell = Новый COMОбъект("WScript.Shell");
					WShell.Run(ПолучитьСтрокуКомандыВыгрузки(Задание.ИнформационнаяБаза, Задание.ПравилоРазмещения, ИмяФайлаВыгрузки));
					ЗаписатьНачалоЗаданияВЛог(Задание, ?(ИмяФайлаВыгрузки = "", "Пусто для базы " + Задание.ИнформационнаяБаза, ИмяФайлаВыгрузки));
					Задание.ВыгрузкаНачата = 1;
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
		
		ЗапущеноВыгрузок = 0;
		Для Каждого Элем Из мЗаданий Цикл
			ЗапущеноВыгрузок = ЗапущеноВыгрузок + Элем.ВыгрузкаНачата;
		КонецЦикла;
		
		Если мЗаданий.Количество() = ЗапущеноВыгрузок Тогда Прервать КонецЕсли;
		
		ОчиститьЛогИфайловыеБлокировки();
		Пауза(5000);
	КонецЦикла;
Показать

База для архивирования на SQL и без галочки стандартная. Комментарием "итерация №" отмечено на какой итерации внешнего цикла сюда попадет выполнение кода. Так вот у меня между 2й итерацией и 3й успевают стартануть регл.задания, т.к. блокировка регл.заданий не установлена ни в итерации 1, ни в итерации 2.
27. dusha0020 1103 03.04.15 10:11 Сейчас в теме
(26) TMV, Теперь понял Вашу проблему, спасибо. Ну раз уж вы разобрали код на винтики может попробуете подкрутить размер паузы между итерациями? Или направить перенаправить код в нужную итерацию безусловным переходом. Мне чего-то лезть и ковыряться в работающем продукте не хочется, но в любом случае - спасибо за Ваши замечания. Постараюсь их обязательно учесть, когда появится возможность вернуться к доработкам данного продукта.
28. TMV 14 04.04.15 16:58 Сейчас в теме
(27) еще отмечу, что в свойствах ИБ в консоли сервера есть 2 галочки: "Блокировка сеансов" и "Блокировка регл.заданий". Так вот вторую галку вы вообще нигде не ставите. Видимо, у вас базы хоть и серверные, но в них регл.задания отключены, раз вы не сталкивались с такой проблемой.
Еще обнаружена проблема, если путь для архивирования содержит пробелы - каталог преобразуется в файл.
3. ya.Avoronov 115 26.01.15 14:56 Сейчас в теме
Есть возможность подтянуть список баз и настройки подключения из файла ibase.v8i?
Мою лень можно понять если баз великое множество.
5. dusha0020 1103 26.01.15 15:32 Сейчас в теме
(3) ya.Avoronov, Нет такой возможности. У меня всего 4-5 баз. Вам не завидую:)
4. pumbaE 26.01.15 15:24 Сейчас в теме
Возможно скажу банальность, но dt - это не бэкап. Гарантировать, что из dt восстановиться база вы не можете.
TeMochkiN; +1 Ответить
42. strange2007 144 05.09.16 21:03 Сейчас в теме
(4) pumbaE, формат DT является стандартом 1С и он позволяет абстрагироваться от СУБД. Т.е. этот вариант для организаций, в которых имеются сложный набор учётных систем. Тем более если отбросить фанатизм, то копия с MS SQLя примерно в 4 раза дольше восстанавливается на постгре и то при условии, что звёзды сложились нормально и выгрузка была без битых транзакций.
6. Светлый ум 406 27.01.15 07:15 Сейчас в теме
При первом запуске ругается:

{РегистрСведений.ЛогВыгрузок.Форма.ФормаСписка.Форма(14,21)}: Тип не определен (ОписаниеОповещения)
Оповещение = Новый <<?>>ОписаниеОповещения("ПослеЗакрытияВопроса", ЭтаФорма, ИмяФайлаУдаленнойЗаписи);
{РегистрСведений.ЛогВыгрузок.Форма.ФормаСписка.Форма(27,21)}: Тип не определен (ОписаниеОповещения)
Оповещение = Новый <<?>>ОписаниеОповещения("ПослеЗакрытияВопросаДляСписка", ЭтаФорма);
32. kainder 68 18.09.15 16:13 Сейчас в теме
(6) Светлый ум, у меня была подобная ошибка "Тип не определен (ОписаниеОповещения)" - долго не мог понять почему не работает, выяснил что "ОписаниеОповещения" - доступен только на клиенте, а я пытался на сервере.
7. Светлый ум 406 27.01.15 07:17 Сейчас в теме
Тоже самое происходит при нажатии на кнопку: "Рабочий стол"
8. dusha0020 1103 27.01.15 10:39 Сейчас в теме
(7) Светлый ум, Платформа 8.2 у Вас. Да моя недоработка. Писал и использовал на 8.3, выставил совместимость с 8.2, но ОписаниеОповещения это тип из 8.3, а проверка модулей этого косяка не нашла.
Обновляться не собираетесь? Или подождите. Я через день-два исправлю эту проблему.
9. dusha0020 1103 27.01.15 10:45 Сейчас в теме
(7) Светлый ум, $m я Вам сейчас верну. Раз уж так получилось.
P.S. Не нашел где теперь переводы делаются - скачал Ваш отчет.
10. mmoozzgg 27.01.15 13:56 Сейчас в теме
а все базы на одном сервере? а бэкап этой базы решен?
11. Светлый ум 406 27.01.15 14:23 Сейчас в теме
Могли не возвращать...) Помимо Sql БекАпов, хотел запустить раз в неделю ДТ - поправляйте, через 2 недели еще раз скачаю.
12. Светлый ум 406 27.01.15 14:24 Сейчас в теме
Да базы на одном сервере.
13. webresurs 204 27.01.15 20:07 Сейчас в теме
ошибка : {ОбщийМодуль.УправлениеБлокировками.Модуль(40)}: Ошибка при вызове метода контекста (Connect): Произошла исключительная ситуация (V83.COMConnector.1): Версия компоненты 'comcntr' (8.3.5.1119) отличается от версии корневого модуля 'core83' (8.3.5.1383)
14. dusha0020 1103 28.01.15 09:30 Сейчас в теме
(13) webresurs, Может быть что-то с обновлением? Попробуйте перерегистрировать компоненту comcntr.dll.
RedSvr32 "С:\Progrаm files... (По адресу папки bin для нужной версии платформы)\comcntr.dll"
Например: Regsvr32 "C:\Program Files\1cv83\8.3.5.1383\bin\comcntr.dll"
15. webresurs 204 28.01.15 14:13 Сейчас в теме
(14)
сделал regsvr32 ,
удалил папку "8.3.5.1119"
все равно ошибка "{ОбщийМодуль.УправлениеБлокировками.Модуль(40)}: Ошибка при вызове метода контекста (Connect): Произошла исключительная ситуация (V83.COMConnector.1): Версия компоненты 'comcntr' (8.3.5.1119) отличается от версии корневого модуля 'core83' (8.3.5.1383)"
16. dusha0020 1103 28.01.15 14:48 Сейчас в теме
(15) webresurs, Это какая-то админская беда. Если есть сисадмин лучше обсудить с ним. Если нет попробую предложить еще варианты:
1. Перезагрузка.
2. Есть подозрение, что лежит не свежая dll-ка. На картинке у меня ситуация - версия dll и платформы совпадают. Проверьте у себя. Если версия dll библиотеки 8.3.5.1119 то нужно найти и скопировать с заменой dll версии 8.3.5.1383 (у меня к сожалению ее нет). Это если не хочется переустанавливать платформу, так как бок вылез скорее всего из-за установки, когда при обновлении версии ядра не обновилась библиотека COM соединения.
Прикрепленные файлы:
17. PAPIruss 04.02.15 14:07 Сейчас в теме
Подскажите на 8.2 работать будет?
Спасибо.
18. dusha0020 1103 05.02.15 12:47 Сейчас в теме
(17) PAPIruss, (6) Светлый ум, Добавил совместимую с 8.2 версию. Почему не заменил - в статье. Можете пользоваться:)
19. pandemic 17.03.15 15:28 Сейчас в теме
Подскажите если стоит несколько серверов 1с и на разных портах работать будет ?!
20. dusha0020 1103 17.03.15 17:35 Сейчас в теме
(19) pandemic, Будет. В справочнике серверов необходимо задавать в этом случае полный идентификатор сервера с портом через ":"
Например: "serv1Cfirst:1540", "serv1Csecond:1620" и т.д.
Подробнее смотрите в СП по теме "Менеджер COM-соединений (COM connector), ConnectAgent (ConnectAgent)"
29. xten 47 11.04.15 00:43 Сейчас в теме
Большое спасибо автору за весьма комплексное решение и можно маленький вопрос: будет ли осуществляться "бэкапирование" базы, когда в ней работают юзеры, или нужно всех выгонять ?
30. xten 47 11.04.15 00:44 Сейчас в теме
имел в виду файловый вариант базы )
31. dusha0020 1103 14.04.15 09:16 Сейчас в теме
(30) xten, Для файловых вариантов в стандартных конфигурациях будет попытка выгнать пользователей стандартным механизмом, сначала вежливо попросив, а потом через обработчик ожидания. Но стандарт стандарту рознь, поэтому в каких конкретно конфигурациях будет работать, а в каких нет не скажу, нужно пробовать на месте. Если же база нестандартная и файловая - то предварительный разгон пользователей обязателен, что в принципе сводит на нет все преимущества автоматизации, потому что коль уж разгонять руками, то и выгрузку после этого можно сделать руками.
33. Dubrovsky_sv 24.09.15 17:29 Сейчас в теме
Добрый день, у меня пишет что у пользователя не достаточно полномочий для работы с базой данных, в чем может быть проблема?
34. dusha0020 1103 25.09.15 09:48 Сейчас в теме
(33) refarm, Добрый день. Хотелось бы знать где и когда пишет, но рискну предположить, что пользователь от имени которого Вы пытаетесь подключиться к базе и сделать бэкап не обладает правами администратора.
36. pallid 270 10.11.15 14:59 Сейчас в теме
{ОбщийМодуль.ОбработкаЗаданий.Модуль(34)}: Ошибка при вызове метода контекста (Run)
по причине:
Произошла исключительная ситуация (0x80070002)

вот такую ошибку выдает, в чем может быть причина?
37. tehas 44 16.03.16 12:48 Сейчас в теме
38. dusha0020 1103 18.03.16 13:00 Сейчас в теме
(36) white_sochi, (37) tehas, Похоже юзеру сервера запрещен запуск скриптов на том же сервере. Копайте права.
35. slimuz 20.10.15 09:08 Сейчас в теме
Добрый день. При ручном старте задачи пишет:

Возврат Запрос.Выполнить().Выгрузить()[0].ДатаЧислом;
по причине:
Ошибка выполнения запроса
по причине:
У пользователя недостаточно прав на исполнение операции над базой данных.

У пользователя полные права. Клиент-серверная база, стандартная конфигурация.
39. AfipNPZ 15.06.16 16:53 Сейчас в теме
Добрый день! Почему-то не получается отключить сеансы перед началом копирования. Подскажите, может где забыли настроить?
40. AfipNPZ 16.06.16 22:43 Сейчас в теме
Здравствуйте! Пытались настроить копирование sql-баз (УПП). При попытке запуска из файловой базы копирование согласно логу начинается, но не заканчивается. А если запускать из серверной версии, то ничего не происходит, только выскакивают сообщения о подключениях. Версия платформы 8.3.7.1860
41. dusha0020 1103 17.06.16 10:06 Сейчас в теме
(40) AfipNPZ, Добрый день. Не знаю что Вам и сказать... Если исключить банальные ошибки типа неправильно введенных данных для подключения, то на ум ничего не приходит. Дело в том, что я уже больше года не заглядывал в код этой конфигурации и почти все забыл. И сейчас, я вполне счастливый человек тем, что базы мои бэкапятся sql сервером, и я вообще этим не занимаюсь. Данная конфигурация осталась на прежней работе и разворачивать ее здесь у меня нет ни желания ни необходимости . А тем более не хочется телепатически пытаться сообразить где же могут у Вас возникнуть заморочки.
Код совершенно открыт и я советую Вам обратиться к своему программисту, для того, чтобы он нашел и пофиксил проблему. Никаких ограничений я на Вас не накладываю и претензий тоже иметь не буду.
Оставьте свое сообщение