Приложение для "перезаливки" баз данных 1С:Предприятия.
Реализовано на OneScript (http://oscript.io). Для работы необходим OneScript версии 1.0.20 или выше. Основное отличие форка - работа с хранилищами расширений. (Платформа не ниже 8.3.12)
Под словом "перезалить" понимается процедура восстановления одной базы данных из резервных копий другой базы данных. Например, если необходимо загрузить данные из базы продуктива в тестовую или разработочную.
Перезаливатор позволяет максимально автоматизировать процесс "перезаливки" баз данных 1С:Предприятия.
Имеется GUI-интерфейс для выбора базы-приемника и базы-назначения, а также окно с выводом результата.
- Скачать файл "Distr\Perezalivator-<версия>.ospx"
- Запустить установку с помощью пакетного менеджера opm
Установка:
opm install -f <Путь к файлу Perezalivator-<версия>.ospx>
Можно также воспользоваться командным файлом "install.bat" из директории "Distr"
Зависит от:
- Библиотеки json: https://github.com/oscript-library/json
- Библиотеки gui: https://github.com/oscript-library/oscript-simple-gui
- Библиотеки TRun1C: https://github.com/Tavalik/TRun1C (модифицирован и встроен в поставку)
- Библиотеки TMail: https://github.com/Tavalik/TMail
- Библиотеки TLog: https://github.com/Tavalik/TLog
- Библиотеки messenger: https://github.com/oscript-library/messenger
(все зависимые библиотеки устанавливаются автоматически при условии использования пакетного менеджера opm)
Запуск приложения осуществляется запуском файла Perezalivator_Run.bat. При первом запуске в текущем каталоге будет создан пустой файл настроек Perezalivator_Params.json.
Необходимо заполнить все параметры, описав возможные базы-источники, базы-назначения и параметры для отправки электронных писем.
Проверить корректность введенных настроек можно запустив файл Perezalivator_Run_Test.bat. Перезаливатор будет запущен в режиме тестирования настроек.
При следующем запуске файла Perezalivator_Run.bat откроется окно, в котором необходимо выбрать базу-источник и базу-назначения.
Если необходимо, можно указать дату, на которую необходимо получить данные (всегда используется конец дня).
Если указать telegram bot ID и ID пользователей, то будет приходить уведомление в телеграм.
По пунктам:
- Указание базы источника
- Указание базы назначения
- Указание даты, на которую надо восстановить бекап
- Если используются расширения, и они подключены к хранилищам, то надо получить список расширений из базы источника
- Имя расширения в конфигураторе
- GUID расширения
- Указан флаг брать настройки из настроек по умолчанию (далее будет подробно)
- Версия расширения в базе источника
- Хеш сумма расширения
- Адрес хранилища расширения
- Имя пользователя хранилища расширения
- Пароль пользователя хранилища расширения
- Адрес папки, где лежат все хранилища, при этом имя папки хранилища должно соответствовать имени расширения в конфигурации
- Логин по умолчанию для хранилища расширений
- Пароль по умолчанию для хранилища расширений
- Выполнить развертывание бекапа
Пример заполненного файла настроек параметров JSON:
{
"Источники": [{
"Имя": "DEV_PEREZALIVATOR_SOURCE",
"ПутьКПлатформе1С": "C:\\Program Files\\1cv8\\8.3.12.1412\\bin\\1cv8.exe",
"ТипБазы": "S",
"ВерсияCOMConnector": "83",
"ИмяБазы": "DEV_PEREZALIVATOR_SOURCE",
"АдресКластера": "localhost",
"ПортКластера": 1541,
"ПортАгента": 1540,
"ИмяПользователя": "admin",
"ПарольПользователя": "adminpass",
"АдресСервераSQL": "SQL_1C",
"ИмяПользователяSQL": "sa",
"ПарольПользователяSQL": "superpass",
"ИмяБазыДанныхSQL": "DEV_PEREZALIVATOR_SOURCE"
},
{
"Имя": "DEV_PEREZALIVATOR_SOURCE_1",
"АдресСервераSQL": "SQL_1C",
"ИмяПользователяSQL": "sa",
"ПарольПользователяSQL": "superpass*",
"ИмяБазыДанныхSQL": "DEV_PEREZALIVATOR_SOURCE_1"
}],
"Приемники": [{
"Имя": "DEV_PEREZALIVATOR_DEST",
"TelegramID":[],
"ПутьКПлатформе1С": "C:\\Program Files\\1cv8\\8.3.12.1412\\bin\\1cv8.exe",
"ТипБазы": "S",
"ВерсияCOMConnector": "83",
"ИмяБазы": "DEV_PEREZALIVATOR_DEST",
"АдресКластера": "hyper",
"ПортКластера": 1541,
"ПортАгента": 1540,
"ИмяПользователя": "admin",
"ПарольПользователя": "admin",
"АдресХранилища": "E:\\Storage\\TestPerezalivator",
"ИмяПользователяХранилища": "dest",
"ПарольПользователяХранилища": "123",
"АдресСервераSQL": "hyper",
"ИмяПользователяSQL": "Login",
"ПарольПользователяSQL": "Pass",
"ИмяБазыДанныхSQL": "DEV_PEREZALIVATOR_DEST",
"АдресХранилищРасширенийПоУмолчанию": "E:\\Temp\\ТестовыеХранилища\\",
"ИмяПользователяРасширенийХранилищаПоУмолчанию": "Тест",
"ПарольПользователяРасширенийХранилищаПоУмолчанию": "123",
"ПроизвольныйКодСразуПослеВосстановленияБекапа": "ЗаписьЖурналаРегистрации(\"ПроизвольныйКодСразуПослеВосстановленияБекапа\", УровеньЖурналаРегистрации.Информация,,,\"ПроизвольныйКодСразуПослеВосстановленияБекапа\");",
"ПроизвольныйКодПослеВсехОперацийДоСнятияБлокировки": "ЗаписьЖурналаРегистрации(\"ПроизвольныйКодПослеВсехОперацийДоСнятияБлокировки\", УровеньЖурналаРегистрации.Информация,,,\"ПроизвольныйКодПослеВсехОперацийДоСнятияБлокировки\");",
"Расширения": [{
"Имя": "Тест1",
"ИспользоватьНастройкиПоУмолчанию": false,
"АдресХранилища": "E:\\Temp\\ТестовыеХранилища\\Тест1",
"ИмяПользователяХранилища": "Тест1",
"ПарольПользователяХранилища": "123"
},
{
"Имя": "Тест2",
"ИспользоватьНастройкиПоУмолчанию": true,
"АдресХранилища": "",
"ИмяПользователяХранилища": "",
"ПарольПользователяХранилища": ""
}]
},
{
"Имя": "DEV_PEREZALIVATOR_DEST_1",
"TelegramID":[],
"ПутьКПлатформе1С": "C:\\Program Files\\1cv8\\8.3.12.1412\\bin\\1cv8.exe",
"ТипБазы": "S",
"ВерсияCOMConnector": "83",
"ИмяБазы": "DEV_PEREZALIVATOR_DEST_1",
"АдресКластера": "hyper",
"ПортКластера": 1541,
"ПортАгента": 1540,
"ИмяПользователя": "admin",
"ПарольПользователя": "admin",
"АдресХранилища": "E:\\Storage\\TestPerezalivator",
"ИмяПользователяХранилища": "dest",
"ПарольПользователяХранилища": "123",
"АдресСервераSQL": "hyper",
"ИмяПользователяSQL": "sa",
"ПарольПользователяSQL": "superpass*",
"ИмяБазыДанныхSQL": "DEV_PEREZALIVATOR_DEST_1",
"ПроизвольныйКодСразуПослеВосстановленияБекапа": "",
"ПроизвольныйКодПослеВсехОперацийДоСнятияБлокировки": "",
"Расширения": []
}],
"ЭлектроннаяПочта": {
"НастройкиSMTP": {
"АдресSMTP": "",
"ПортSMTP": 587,
"ПользовательSMTP": "noreply@noreply",
"ПарольSMTP": "",
"ИспользоватьSSL": true
},
"ПолучателиСообщений": {
"АдресЭлектроннойПочтыПолучателя": "[email protected];"
}
},
"ПрочиеНастройки": {
"TelegramBotID": "552510344:AAFq0oIVy6znxxxxxxxxxxxxxxxxxxxx"
}
}
Если не используются хранилища конфигурации, то можно брать вариант источника DEV_PEREZALIVATOR_SOURCE_1, а приемника DEV_PEREZALIVATOR_DEST_1. В этом случае - при восстановлении базы, расширения просто перенесутся как есть. В случае, если используются хранилища, тогда надо брать варианты DEV_PEREZALIVATOR_DEST и DEV_PEREZALIVATOR_SOURCE.
Поля АдресХранилищРасширенийПоУмолчанию, ИмяПользователяРасширенийХранилищаПоУмолчанию, ПарольПользователяРасширенийХранилищаПоУмолчанию используются в паре вместе с параметром ИспользоватьНастройкиПоУмолчанию. Логика их использования такова:
- Есть папка, где лежат все хранилища расширений, и имена папок соответствуют именам расширений
- Один пользователь или пароль на все подключаемые хранилища
Если в настройках расширения указан флаг ИспользоватьНастройкиПоУмолчанию то тогда все пустые параметры хранилища будет подставляться из значений по умолчанию. Т.е. может быть один пароль на все хранилища, а пользователи разные. Тогда указываются пользователи, а пароли оставляются пустыми, в этом случае система заполнит их значениями по умолчанию.
После указания всех исходных параметров, перезаливатор начнет работу по следующему алгоритму:
- Установка блокировки регламентных заданий и начала сеансов в базе-приемнике
- Завершение активных сеансов (спустя несколько минут) в базе-приемнике
- Расчет последовательности файлов резервных копий для базы-источника для восстановления на указанную дату
- Восстановление базы-приемника по найденной последовательности файлов
- Если указан код для выполнения после восстановления, то он будет выполнен
- Перевод базы-приемника в простую модель восстановления
- Сжатие файлов журнала транзакций базы-приемника
- Отключение базы-приемника от хранилища
- Подключение базы-приемника к хранилищу
- Обновление конфигурации базы данных базы-приемника
- Если указаны настройки подключения к хранилищам расширений то стартует цикл работы с расширениями:
- Отключение расширений базы-приемника от хранилища
- Подключение расширений базы-приемника к хранилищу
- Обновление расширений конфигурации базы данных базы-приемника
- Если был указан произвольный код после всех действий, то он будет выполнен
- Снятие блокировки регламентных заданий и начала сеансов базы-приемника
- Уведомление о результате по электронной почте (если указан smtp адрес, иначе шаг пропускается) или телеграм
Дополнительно: в 11 пункте идет проверка на то, указан ли АдресХранилища в параметрах, если нет, то проверяется включен ли флаг ИспользоватьНастройкиПоУмолчанию и указан ли АдресХранилищРасширенийПоУмолчанию, если нет, то не будет выполнена попытка работы с хранилищем у данного расширения. Т.е. если есть несколько расширений, у которых нет хранилища, их можно или вообще не указывать в параметрах, или же указывать, но ставить флаг ИспользоватьНастройкиПоУмолчанию в Ложь, и не указывать путь к хранилищу.
Если в базе-приемнике присутствуют активные соединения, будет показана таблица со всеми соединениями, а также будет предоставлена возможность завершить все активные сеансы.
Есть возможность выполнения произвольного кода в базе данных в двух местах - сразу после восстановления базы, и после подключения всех расширений и хранилищь. Удобно применять, например, для того, чтобы сразу в базе поменять заголовок конфигурации и перевести ее в режим "Это копия базы". Выполнение кода выполняется при помощи подключения расширения ExtRunCode, входящего в поставку, и потом расширение удаляется. Могут проблемы, связанные с тем, что расширение сделано на 8.3.12, так что на более старых версиях - его надо будет пересохранить с нужным уровнем совместимости.