Ситуация, когда головная база распределенной информационной системы (РИБ) выходит из строя вместе с оборудованием, — один из самых серьезных вызовов для технического специалиста. Если у вас в распоряжении есть бэкап головной базы трехдневной давности и при этом стабильно работающая подчиненная (дочерняя) база, содержащая актуальные данные, проблему можно решить без потери информации. Рассмотрим подробно, как «дотянуть» недостающие данные за три дня из подчиненного узла в восстановленную из бэкапа головную базу.
Этот способ является наиболее предпочтительным, так как он позволяет использовать штатный механизм обмена данными, сохраняя целостность структуры РИБ. Проанализируем алгоритм действий по шагам.
Шаг 1: Восстановление и подготовка метаданных
Прежде всего, развернем головную базу из имеющегося бэкапа. Важно понимать: если за те три дня, которые отсутствуют в бэкапе, в конфигурацию вносились изменения (обновление релиза или правка кода), обычный обмен не запустится из-за разницы в структурах метаданных. В РИБ конфигурация всегда передается от главного к подчиненному. Чтобы выровнять ситуацию, выполним следующие действия:
.cf из подчиненной базы.Шаг 2: Корректировка номеров сообщений
Это критически важный этап. В восстановленном бэкапе счетчики принятых и отправленных сообщений «откатились» на три дня назад. Подчиненная база уже ожидает пакет с номером, например, 150, а головная после восстановления предложит ей пакет №140. Подчиненная база проигнорирует такой пакет. Нам нужно синхронизировать номера вручную:
ПланыОбмена (например, «Полный»).Шаг 3: Регистрация данных в подчиненной базе
Теперь нам нужно заставить подчиненную базу «вспомнить», какие данные она должна передать. Для этого воспользуемся обработкой «Регистрация изменений для обмена»:
Шаг 4: Выполнение обмена
Запустим стандартную процедуру обмена. Данные из подчиненной базы поступят в головную, заполнив «пробел» в три дня.
Если головная база повреждена настолько сильно, что восстановление из бэкапа нецелесообразно, или если объем данных за пропущенный период огромен, мы можем превратить актуальную подчиненную базу в полноценную автономную базу, а затем сделать её новой «головой».
Проанализируем программный способ сброса признака подчиненности. Для этого в подчиненной базе необходимо выполнить следующий код:
// Сброс связи с главным узлом
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
После выполнения этой команды база перестает считать себя подчиненной. Теперь она становится основной. Далее алгоритм действий следующий:
Внимание: Этот метод радикален, так как требует перенастройки обменов на всех остальных точках, если их было больше двух.
Если регистрация изменений кажется слишком сложной, можно воспользоваться обработкой УниверсальныйОбменДаннымиXML. Разберем особенности этого подхода:
Рассмотрим, почему это важно. Если поиск будет идти по коду или наименованию, 1С может создать дубли справочников, что приведет к хаосу в учете. Штатный механизм РИБ всегда использует GUID, поэтому при использовании XML-выгрузки мы должны имитировать это поведение.
После того как данные тем или иным способом попали в головную базу, работа не окончена. Необходимо выполнить технологические операции для обеспечения целостности данных:
Таким образом, мы выяснили, что наиболее безопасным и «чистым» способом является ручная регистрация изменений в подчиненном узле с предварительной синхронизацией номеров сообщений в ПланыОбмена. Это позволяет восстановить работоспособность системы без нарушения логики распределенной базы.