Skip to content

Приложение для "перезаливки" баз данных 1С:Предприятия

Notifications You must be signed in to change notification settings

DitriXNew/Perezalivator

 
 

Repository files navigation

Перезаливатор

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

Реализовано на OneScript (http://oscript.io). Для работы необходим OneScript версии 1.0.20 или выше. Основное отличие форка - работа с хранилищами расширений. (Платформа не ниже 8.3.12)

Описание

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

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

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

Скриншот1

Установка

  1. Скачать файл "Distr\Perezalivator-<версия>.ospx"
  2. Запустить установку с помощью пакетного менеджера opm

Установка:

opm install -f <Путь к файлу Perezalivator-<версия>.ospx>

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

Зависимости

Зависит от:

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

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

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

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

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

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

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

Если указать telegram bot ID и ID пользователей, то будет приходить уведомление в телеграм.

По пунктам:

  1. Указание базы источника
  2. Указание базы назначения
  3. Указание даты, на которую надо восстановить бекап
  4. Если используются расширения, и они подключены к хранилищам, то надо получить список расширений из базы источника
  5. Имя расширения в конфигураторе
  6. GUID расширения
  7. Указан флаг брать настройки из настроек по умолчанию (далее будет подробно)
  8. Версия расширения в базе источника
  9. Хеш сумма расширения
  10. Адрес хранилища расширения
  11. Имя пользователя хранилища расширения
  12. Пароль пользователя хранилища расширения
  13. Адрес папки, где лежат все хранилища, при этом имя папки хранилища должно соответствовать имени расширения в конфигурации
  14. Логин по умолчанию для хранилища расширений
  15. Пароль по умолчанию для хранилища расширений
  16. Выполнить развертывание бекапа

Пример заполненного файла настроек параметров 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.

Поля АдресХранилищРасширенийПоУмолчанию, ИмяПользователяРасширенийХранилищаПоУмолчанию, ПарольПользователяРасширенийХранилищаПоУмолчанию используются в паре вместе с параметром ИспользоватьНастройкиПоУмолчанию. Логика их использования такова:

  1. Есть папка, где лежат все хранилища расширений, и имена папок соответствуют именам расширений
  2. Один пользователь или пароль на все подключаемые хранилища

Если в настройках расширения указан флаг ИспользоватьНастройкиПоУмолчанию то тогда все пустые параметры хранилища будет подставляться из значений по умолчанию. Т.е. может быть один пароль на все хранилища, а пользователи разные. Тогда указываются пользователи, а пароли оставляются пустыми, в этом случае система заполнит их значениями по умолчанию.

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

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

Дополнительно: в 11 пункте идет проверка на то, указан ли АдресХранилища в параметрах, если нет, то проверяется включен ли флаг ИспользоватьНастройкиПоУмолчанию и указан ли АдресХранилищРасширенийПоУмолчанию, если нет, то не будет выполнена попытка работы с хранилищем у данного расширения. Т.е. если есть несколько расширений, у которых нет хранилища, их можно или вообще не указывать в параметрах, или же указывать, но ставить флаг ИспользоватьНастройкиПоУмолчанию в Ложь, и не указывать путь к хранилищу.

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

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

About

Приложение для "перезаливки" баз данных 1С:Предприятия

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • 1C Enterprise 99.9%
  • Batchfile 0.1%