В данной статье я хотел бы рассказать о приложении «Перезаливатор», которое позволило нам значительно облегчить процесс «перезаливки» баз, вплоть до самостоятельной «перезаливки» информационных баз консультантами 1С.
(1)
Отличный вопрос. На самом деле происходит только снятие блокировки начала сеансов. Регламентные задания остаются заблокированными.
Исправил в статье. Спасибо!
(11)
Файл слияния не генерирует, но идея хорошая! Надо подумать над этим.
Скрипт просто формирует текстовый файл со списком "трижды измененных" объектов по этим трем конфигурациям.
О.. старый добрый интерфейс "от программиста". Кровь из глаз :-)
Считаю, что GUI для таких задач зло. Нужно уметь пользоваться консолью / скриптами.
За решение в целом +
Но нам для полноценного соответствия "Автоматизируй это" пришлось немного расширить функциональность:
1. Создание информационной базы
2. Удаление информационной базы
3. Отключение от РИБ при перезаливке
4. Восстановление на момент времени
5. Получение текущей копии базы
Можно ли и как эти доработки включить в ваш проект: присоединиться к github или обменяться по почте?
Может кому окажется полезным...
Не совсем понятно в итоге в автоматическом режиме работать приложение может? Или процесс "перезаливки" стартует исключительно по нажатию на кнопку? Т.е. есть задача каждую ночь запускаться, выгружать данные из рабочей базы и загружать в резервную базу.
На данный момент эта задача решается при помощи планировщика заданий Windows и запуска следующего скрипта:
Или процесс "перезаливки" стартует исключительно по нажатию на кнопку?
Вот сам Перезаливатор требует ручного нажатия. Но вся суть этой GUI оболочки, только сформировать параметры и вызвать соответствующие процедуры библиотек TMSSQL, TRun1C. Посмотрите описание, там много экспортных методов.
Для автоматических действий используем скрипты, код которых очень похож на основную процедуру Перезаливатора, но под каждую операцию свой скрипт. Выглядит примерно так:
...
// Установим блокировку начала сеансов
Если Не НетДоступаККонсолиКластера Тогда
Если Не БылиОшибки Тогда
Если Запуск1С.УстановитьБлокировкуНачалаСеансов() Тогда
СтрокаДействие = "Установить блокировку начала сеансов - УСПЕШНО";
Иначе
СтрокаДействие = "Установить блокировку начала сеансов - ОШИБКА: " + Запуск1С.ТекстОшибки;
БылиОшибки = Истина;
КонецЕсли;
Логирование.ЗаписатьСтрокуЛога(СтрокаДействие);
ПолеЛог.Значение = ПолеЛог.Значение + Символы.ПС + СтрокаДействие;
КонецЕсли;
КонецЕсли;
ВыполнитьСборкуМусора();
...
// Восстановим базу
Если Не БылиОшибки Тогда
Если УправлениеMSSQL.ВосстановитьИзРезервнойКопииБД(МассивФайлов,ТаблицаФайловБДИсточника) Тогда
СтрокаДействие = "Восстановить из резервной копии БД - УСПЕШНО";
БазаВосстановлена = Истина;
Иначе
СтрокаДействие = "Восстановить из резервной копии БД - ОШИБКА: " + УправлениеMSSQL.ТекстОшибки;
БылиОшибки = Истина;
КонецЕсли;
Логирование.ЗаписатьСтрокуЛога(СтрокаДействие);
ПолеЛог.Значение = ПолеЛог.Значение + Символы.ПС + СтрокаДействие;
КонецЕсли;
Показать
P.S. Под файлами резервных копий подразумеваются резервные копии, созданные в MSSQL
(16)
Здравствуйте. Объясняю:
1. Автоматизирована работа с сансами (происходит "мягкое" отключение сеансов, а не "SET SINGLE_USER").
2. Автоматизирована работа с хранилищем (отключение, подключение).
3. Добавлено обновление базы данных после подключения к хранилищу.
4. При необходимости, можно добавить еще какие-нибудь обработчики после восстановления данных (например, отключение от РИБ).
5. В отличии от SSMS в Перезаливаторе исключена возможность что-то "испортить", что позволяет пользоваться им консультантам и даже ключевым пользователям.
6. Простой GUI-интерфейс.
Конечно, можно заморочиться и все это реализовать в SSMS, но по мне, так на OneScript все это написать и затем поддерживать проще.
(20) вспомнить бы)) Вроде облажался на спецсимволах - где-то не поставил фигурную(квадратную) скобку или запятую
попробуйте этот шаблон со своими данными в Perezalivator_Params.json
(18)
Там местами перепутаны аргументы наверное
Например в процедуре "ПриОткрытииФормы()":
Данные = Новый Соответствие; Сч = 0;
Для Каждого СтрокаТаблицы Из ТаблицаБазаИсточник Цикл
// стоит вот так
//Данные.Вставить(СтрокаТаблицы.Имя, Сч); Сч = Сч + 1;
// а надо вот так
Данные.Вставить( Сч,СтрокаТаблицы.Имя); Сч = Сч + 1;
КонецЦикла;