"Перезаливатор" - приложение для автоматизации "перезаливки" баз

05.07.18

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

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
(только для физ. лиц)
Perezalivator.zip
.zip 14,31Kb ver:2018.05.18
21 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

В дополнение к статье «Автоматизируй это!» выкладываю приложение «Перезаливатор», о котором шла речь в докладе. 

 

Видеоинструкция

О причинах и контексте создания данного приложения, вы можете узнать из приведенного ниже 20-ти минутного видео. В нем также подробно разбирается процесс установки, настройки и эксплуатации Перезаливатора.

 

 

Описание

Под словом "перезалить" понимается процедура восстановления одной базы данных (база назначения) из резервных копий другой базы данных (база источник). Например, если необходимо загрузить данные из базы продуктива в тестовую или разработочную.

Перезаливатор позволяет максимально автоматизировать процесс "перезаливки" баз данных 1С:Предприятия.

Реализован на OneScript (http://oscript.io). Для работы необходим OneScript версии 1.0.20 или выше.

Код открыт, страница проекта на GitHub: https://github.com/Tavalik/Perezalivator

Имеется GUI-интерфейс для выбора базы-приемника и базы-назначения, а также окно с выводом результата.

 

Установка

  1. Установить OneScript (подробно про установку и настройку можно узнать, например, здесь).
  2. Скачать файл "Distr\Perezalivator-<версия>.ospx" (ссылка)
  3. Запустить установку с помощью пакетного менеджера opm
opm install -f <Путь к файлу Perezalivator-<версия>.ospx>

Можно также воспользоваться командным файлом "install.bat" из директории "Distr"

Зависит от:

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

 

Работа с приложением

Запуск приложения осуществляется запуском файла Perezalivator_Run.bat. При первом запуске в текущем каталоге будет создан пустой файл настроек Perezalivator_Params.json.

Необходимо заполнить все параметры, описав возможные базы-источники, базы-назначения и параметры для отправки электронных писем.

Проверить корректность введенных настроек можно запустив файл Perezalivator_Run_Test.bat. Перезаливатор будет запущен в режиме тестирования настроек.

 
 Пример корректного файла настроек

 

При следующем запуске файла Perezalivator_Run.bat откроется окно, в котором необходимо выбрать базу-источник

 

 

и базу-назначения.

 

 

Если необходимо, можно указать дату, на которую необходимо получить данные (всегда используется конец дня).

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

  1. Установка блокировки регламентных заданий и начала сеансов в базе-приемнике
  2. Завершение активных сеансов (спустя несколько минут) в базе-приемнике
  3. Расчет последовательности файлов резервных копий для базы-источника для восстановления на указанную дату
  4. Восстановление базы-приемника по найденной последовательности файлов
  5. Перевод базы-приемника в простую модель восстановления
  6. Сжатие файлов журнала транзакций базы-приемника
  7. Отключение базы-приемника от хранилища
  8. Подключение базы-приемника к хранилищу
  9. Обновление конфигурации базы данных базы-приемника
  10. Снятие блокировки начала сеансов базы-приемника
  11. Уведомление о результате по электронной почте

Если в базе-приемнике присутствуют активные соединения, будет показана таблица со всеми соединениями, а также будет предоставлена возможность завершить все активные сеансы.

 

 

Отработав, Перезаливатор выдаст соответствующее сообщение (или сообщение об ошибке), а также отправит сообщение о результате работы на электронную почту.

 

 

Заключение

Работаем с Перезаливатором уже больше года. Тот функционал, который был нам необходим, мы реализовали. Если будет интерес сообщества, возможно и дальнейшее развитие программы. 

Кстати, есть еще как минимум 2 подобных проекта:

Спасибо за внимание.

   

Вступайте в нашу телеграмм-группу Инфостарт

См. также

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

В текущих версиях 1С пока нет функции, позволяющей автоматически отмечать возврат оригиналов документов с помощью сканера штрих-кодов. Многие контрагенты часто сталкиваются с проблемой утери оригиналов УПД или их невозврата. В ответ на эти запросы было разработано расширение, которое упрощает контроль за возвратом оригиналов документов и помогает лучше организовать их хранение.

12000 руб.

19.02.2025    607    1    0    

1

Архивирование (backup) Системный администратор 1С v8.3 1C:Бухгалтерия Платные (руб)

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

3600 руб.

03.09.2014    16800    27    6    

33

Архивирование (backup) Системный администратор 1С v8.3 Бесплатно (free)

Предлагаю Вашему вниманию 3 скрипта на bash (sh) для архивирования (backup) типовых конфигураций на Linux средствами 1С и Postgres. Перед запуском корректно заполните раздел "Параметры" в соответствии с Вашими настройками.

20.01.2025    1432    Prelude    5    

11

Архивирование (backup) 1С v8.3 1С:Управление нашей фирмой 3.0 Платные (руб)

Расширение поможет настроить резервное копирование баз SQL в стандартный файл выгрузки баз 1С (*.dt).

2400 руб.

27.08.2024    2088    1    6    

2

HighLoad оптимизация Администрирование СУБД Архивирование (backup) Системный администратор Программист 1С v8.3 Бесплатно (free)

Бэкап в Postgres состоит из набора граблей, которые нужно обойти для успешного восстановления. Они заложены в самых неожиданных местах от предмета резервного копирования (база или кластер) до структуры каталогов. Один неверный шаг и восстановление будет невозможным. Почему нельзя было сделать проще, как в MS SQL или Oracle? Почему бэкап в Postgres оставляет впечатление чьей-то лабораторной работы? Статья адресована прежде всего специалистам 1С, избалованным комфортом в MS SQL, в суровых буднях импортозамещения на Postgres.

13.08.2024    5088    1CUnlimited    9    

6

Инструменты администратора БД Архивирование (backup) Системный администратор Программист Пользователь 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Обработка для "обновления" своей тестовой базы из резервной копии рабочей базы без помощи админов.

1 стартмани

21.05.2024    2807    13    baidinden    4    

8

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

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

04.12.2023    13302    n_mezentsev    15    

27
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. mashinist 7 06.07.18 09:18 Сейчас в теме
Вопрос есть


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


Можно блокировку регламентных заданий не снимать?
2. Tavalik 3437 06.07.18 09:24 Сейчас в теме
(1)
Отличный вопрос. На самом деле происходит только снятие блокировки начала сеансов. Регламентные задания остаются заблокированными.
Исправил в статье. Спасибо!
3. Evil Beaver 8357 06.07.18 10:30 Сейчас в теме
(0) Виталий, а где можно посмотреть и изучить инструмент "Обновлятор" про который ты рассказывал в мае на IsThisDesign?
4. Tavalik 3437 06.07.18 11:20 Сейчас в теме
(3)
Привет. Да надо тоже собраться с силами, взять и опубликовать. :)

Пока только здесь: https://github.com/Tavalik/Obnovlyator
11. Evil Beaver 8357 06.07.18 16:58 Сейчас в теме
(4) Это тот который делает дельты между конфигурацией поставщика, нашей версией и предыдущей поставщика и генерирует файл слияния?
12. Tavalik 3437 07.07.18 06:25 Сейчас в теме
(11)
Файл слияния не генерирует, но идея хорошая! Надо подумать над этим.
Скрипт просто формирует текстовый файл со списком "трижды измененных" объектов по этим трем конфигурациям.
5. Infactum 318 06.07.18 11:50 Сейчас в теме
О.. старый добрый интерфейс "от программиста". Кровь из глаз :-)
Считаю, что GUI для таких задач зло. Нужно уметь пользоваться консолью / скриптами.
За решение в целом +
6. Tavalik 3437 06.07.18 13:09 Сейчас в теме
(5) Мы и пользовались консолью и батниками, пока не решили, что Консультанты и без нас могут базы перезаливать. Для них уже пришлось рисовать GUI.
FTC; cleaner_it; +2 Ответить
7. petrov_2015 06.07.18 15:37 Сейчас в теме
Виталий, Спасибо! Перезаливатор тема востребованная.

Но нам для полноценного соответствия "Автоматизируй это" пришлось немного расширить функциональность:

1. Создание информационной базы
2. Удаление информационной базы
3. Отключение от РИБ при перезаливке
4. Восстановление на момент времени
5. Получение текущей копии базы

Можно ли и как эти доработки включить в ваш проект: присоединиться к github или обменяться по почте?
Может кому окажется полезным...
Прикрепленные файлы:
LexSeIch; eeeio; cleaner_it; Tavalik; +4 Ответить
9. Tavalik 3437 06.07.18 16:21 Сейчас в теме
(7)
Ничегосебе! Круто! Конечно, давайте интегрироваться. Написал в личку.
8. insurgut 208 06.07.18 16:14 Сейчас в теме
Не совсем понятно в итоге в автоматическом режиме работать приложение может? Или процесс "перезаливки" стартует исключительно по нажатию на кнопку? Т.е. есть задача каждую ночь запускаться, выгружать данные из рабочей базы и загружать в резервную базу.

На данный момент эта задача решается при помощи планировщика заданий Windows и запуска следующего скрипта:
CHCP 1251
"C:\Program Files (x86)\1cv8\common\1cestart.exe" CONFIG /S"SQLSRV3\ut_rezerv" /UC My_Password /N"Администратор" /P"My_Password" /Out"C:\Logs\1c.log" /RestoreIB"H:\backup_auto\Торговля_%date:~6,4%-%date:~3,2%-%date:~0,2%.dt"


Но хотелось бы какой-то юзабилити ))

P.S. Под файлами резервных копий подразумеваются резервные копии, созданные в MSSQL?
10. Tavalik 3437 06.07.18 16:32 Сейчас в теме
(8)
Или процесс "перезаливки" стартует исключительно по нажатию на кнопку?


Вот сам Перезаливатор требует ручного нажатия. Но вся суть этой GUI оболочки, только сформировать параметры и вызвать соответствующие процедуры библиотек TMSSQL, TRun1C. Посмотрите описание, там много экспортных методов.

Для автоматических действий используем скрипты, код которых очень похож на основную процедуру Перезаливатора, но под каждую операцию свой скрипт. Выглядит примерно так:

...

	// Установим блокировку начала сеансов
	Если Не НетДоступаККонсолиКластера Тогда
		Если Не БылиОшибки Тогда
			Если Запуск1С.УстановитьБлокировкуНачалаСеансов() Тогда
				СтрокаДействие = "Установить блокировку начала сеансов - УСПЕШНО";
			Иначе
				СтрокаДействие = "Установить блокировку начала сеансов - ОШИБКА: " + Запуск1С.ТекстОшибки;
				БылиОшибки = Истина;
			КонецЕсли;
			Логирование.ЗаписатьСтрокуЛога(СтрокаДействие);
			ПолеЛог.Значение = ПолеЛог.Значение + Символы.ПС + СтрокаДействие;
		КонецЕсли;
	КонецЕсли;
	ВыполнитьСборкуМусора();

...

	// Восстановим базу
	Если Не БылиОшибки Тогда
		Если УправлениеMSSQL.ВосстановитьИзРезервнойКопииБД(МассивФайлов,ТаблицаФайловБДИсточника) Тогда
			СтрокаДействие = "Восстановить из резервной копии БД - УСПЕШНО";
			БазаВосстановлена = Истина;
		Иначе
			СтрокаДействие = "Восстановить из резервной копии БД - ОШИБКА: " + УправлениеMSSQL.ТекстОшибки;
			БылиОшибки = Истина;
		КонецЕсли;
		Логирование.ЗаписатьСтрокуЛога(СтрокаДействие);
		ПолеЛог.Значение = ПолеЛог.Значение + Символы.ПС + СтрокаДействие;		
	КонецЕсли;

Показать


P.S. Под файлами резервных копий подразумеваются резервные копии, созданные в MSSQL


Да, поддерживаются только копии MS SQL Server.
insurgut; +1 Ответить
13. Vo-Va 1017 08.07.18 12:39 Сейчас в теме
Еще бы добавить подключение копии базы к хранилищу.
14. Tavalik 3437 08.07.18 19:53 Сейчас в теме
(13)
Так есть же:

8. Подключение базы-приемника к хранилищу
15. Vo-Va 1017 09.07.18 01:49 Сейчас в теме
(14) Спасибо, был невнимателен
16. xan333 61 11.07.18 10:05 Сейчас в теме
Объясните пожалуйста дремучему чем лучше данное приложение стандартного функционала Microsoft SQL Server Management Studio ?
17. Tavalik 3437 12.07.18 06:38 Сейчас в теме
(16)
Здравствуйте. Объясняю:
1. Автоматизирована работа с сансами (происходит "мягкое" отключение сеансов, а не "SET SINGLE_USER").
2. Автоматизирована работа с хранилищем (отключение, подключение).
3. Добавлено обновление базы данных после подключения к хранилищу.
4. При необходимости, можно добавить еще какие-нибудь обработчики после восстановления данных (например, отключение от РИБ).
5. В отличии от SSMS в Перезаливаторе исключена возможность что-то "испортить", что позволяет пользоваться им консультантам и даже ключевым пользователям.
6. Простой GUI-интерфейс.

Конечно, можно заморочиться и все это реализовать в SSMS, но по мне, так на OneScript все это написать и затем поддерживать проще.

Но есть у меня решение и для сторонников Microsoft SQL Server Management Studio: https://infostart.ru/public/799857/
18. tpkpsd 16.08.18 17:03 Сейчас в теме
Что-то не получается настроить. Обновлятор выходит с нулями вместо баз. Настройки корректные, запускаю на сервере. В чём может быть дело?
19. tpkpsd 17.08.18 10:14 Сейчас в теме
(18) разобрался, мой косяк был
20. user935352 04.02.19 16:47 Сейчас в теме
(19) а в чем косяк был? у меня такая же история, не понимаю, где ошибся.
21. tpkpsd 05.02.19 16:42 Сейчас в теме
(20) вспомнить бы)) Вроде облажался на спецсимволах - где-то не поставил фигурную(квадратную) скобку или запятую
попробуйте этот шаблон со своими данными в Perezalivator_Params.json

{
"Источники":
[
{
"Имя" : "ЗУП",
"АдресСервераSQL" : "server2",
"ИмяПользователяSQL" : "sa",
"ПарольПользователяSQL" : "ПарольСкуля",
"ИмяБазыДанныхSQL" : "ИмяОригиналаБазыВСкуле"
}
],
"Приемники":
[
{
"Имя" : "ЗУП копия",
"ПутьКПлатформе1С" : "c:\\Program Files (x86)\\common\\1cestart.exe",
"ТипБазы" : "S",
"ВерсияCOMConnector" : "83",
"ИмяБазы" : "ЗУП копия",
"АдресКластера" : "server",
"ПортКластера" : "1541",
"ПортАгента" : "1540",
"ИмяПользователя" : "ПользовательБазы",
"ПарольПользователя" : "ПарольБазы",
"АдресХранилища" : "",
"ИмяПользователяХранилища" : "",
"ПарольПользователяХранилища" : "",
"АдресСервераSQL" : "server2",
"ИмяПользователяSQL" : "sa",
"ПарольПользователяSQL" : "ПарольСкуля",
"ИмяБазыДанныхSQL" : "ИмяКопииБазыВСкуле"
}
]
}
Показать
22. user935352 05.02.19 17:17 Сейчас в теме
(21)

{
"Источники":
[
{
"Имя" : "ЗУП",
"АдресСервераSQL" : "server2",
"ИмяПользователяSQL" : "sa",
"ПарольПользователяSQL" : "ПарольСкуля",
"ИмяБазыДанныхSQL" : "ИмяОригиналаБазыВСкуле"
}
],
"Приемники":
[
{
"Имя" : "ЗУП копия",
"ПутьКПлатформе1С" : "c:\\Program Files (x86)\\common\\1cestart.exe",
"ТипБазы" : "S",
"ВерсияCOMConnector" : "83",
"ИмяБазы" : "ЗУП копия",
"АдресКластера" : "server",
"ПортКластера" : "1541",
"ПортАгента" : "1540",
"ИмяПользователя" : "ПользовательБазы",
"ПарольПользователя" : "ПарольБазы",
"АдресХранилища" : "",
"ИмяПользователяХранилища" : "",
"ПарольПользователяХранилища" : "",
"АдресСервераSQL" : "server2",
"ИмяПользователяSQL" : "sa",
"ПарольПользователяSQL" : "ПарольСкуля",
"ИмяБазыДанныхSQL" : "ИмяКопииБазыВСкуле"
}
]
}
Показать


нет, к сожалению, тоже самое.
23. mirco 74 20.09.19 15:40 Сейчас в теме
(18)
Там местами перепутаны аргументы наверное
Например в процедуре "ПриОткрытииФормы()":

Данные = Новый Соответствие; Сч = 0;
Для Каждого СтрокаТаблицы Из ТаблицаБазаИсточник Цикл
// стоит вот так
//Данные.Вставить(СтрокаТаблицы.Имя, Сч); Сч = Сч + 1;

// а надо вот так
Данные.Вставить( Сч,СтрокаТаблицы.Имя); Сч = Сч + 1;
КонецЦикла;

Ну и далее так же
Lusha_28; +1 Ответить
24. mirco 74 20.09.19 15:53 Сейчас в теме
(0)
Спасибо за перезаливатор.
У Вас на скриншотах версия 2.0...А на гитхабе первая. И пуллреквест висит.
А будет продолжение работы над проектом ?
Оставьте свое сообщение