При работе с распределенными информационными базами (РИБ) в 1С:Предприятие 8.3 администраторы и программисты часто сталкиваются с ситуацией, когда один из подчиненных узлов отказывается обновляться. Ситуация осложняется тем, что база может перестать открываться как в режиме «Предприятие», так и в «Конфигураторе», выдавая критические ошибки SQL или внутренней объектной модели SDBL.
Рассмотрим подробнее сценарий, когда при попытке принять изменения конфигурации в узле возникают ошибки вида Ошибка SQL: Поле не найдено 'T1._Fld9067RRef' или В схеме базы данных нет таблицы с именем ConstChngR10081. Проанализируем причины этого поведения и разберем по шагам методы восстановления работоспособности базы.
Прежде чем переходить к лечению, выясним причину. Ошибки, начинающиеся на _Fld (поля таблиц) или ConstChngR (таблицы регистрации изменений констант), указывают на рассинхронизацию между метаданными конфигурации и фактической физической структурой таблиц в файле .1CD или на SQL-сервере.
В распределенных базах это чаще всего происходит из-за сбоя в процессе реструктуризации. Платформа уже «знает», что в новой версии конфигурации должны быть определенные поля, но физически создать их в базе данных не смогла. Особенно часто это проявлялось на платформе версии 8.3.13.1690, которая имела известные проблемы с механизмом фонового обновления и обработкой таблиц миграции данных в РИБ.
Как показывает практика, наиболее эффективным и быстрым способом является временный откат на более стабильную ветку платформы для завершения процесса реструктуризации. Рассмотрим этот алгоритм:
.1CD), так как неудачная реструктуризация может окончательно испортить заголовок БД.8.3.12 (например, 8.3.12.1855).8.3.12. Несмотря на то, что конфигурация может требовать более новую платформу, для целей реструктуризации этот метод часто срабатывает._Fld или таблицы ChngR.Важный нюанс: Если база выдает ошибку «поврежден заголовок базы данных», предварительно воспользуйтесь утилитой chdbfl.exe, которая находится в папке bin установленной платформы.
Иногда узел блокирует обновление, так как ожидает завершения транзакции обмена. В этом случае мы можем временно перевести базу в автономный режим, чтобы «протолкнуть» обновление. Для этого проанализируем следующий метод:
Запустите «1С:Предприятие» с параметром командной строки для снятия признака подчиненного узла. Это можно сделать через консоль:
1cv8.exe DESIGNER /F "ПутьКВашейБазе" /ResetMasterNode
После выполнения этой команды база станет «самостоятельной». Попробуйте зайти в конфигуратор и выполнить Тестирование и исправление с включенными галочками «Реиндексация таблиц» и «Реструктуризация таблиц». После того как ошибки структуры будут устранены, связь с главным узлом можно восстановить программно в режиме «Предприятие» с помощью кода:
ПланыОбмена.УстановитьГлавныйУзел(СсылкаНаГлавныйУзел);
Если обновление через файл обмена (XML) постоянно «вылетает», можно попробовать обновить конфигурацию узла напрямую из файла конфигурации .cf, выгруженного из центральной базы того же релиза. Разберем шаги:
Внимание: Этот метод требует осторожности, так как может привести к потере уникальных идентификаторов объектов, если релизы конфигураций в центре и в узле изначально различались.
Если ни один из методов выше не помог, а ошибки SDBL продолжают появляться при любом действии, проанализируем самый надежный, но трудозатратный способ. Часто быстрее создать новый образ узла, чем пытаться восстановить физически разрушенную структуру таблиц.
Посмотрим на последовательность действий:
Для предотвращения подобных ситуаций в будущем, рекомендуем придерживаться следующих правил при эксплуатации РИБ на платформе 8.3:
_Fld.chdbfl.exe для профилактики здоровья файловой базы, особенно после аварийного завершения работы компьютера или выключения света в магазине.Таким образом, мы выяснили, что основной причиной ошибки является баг конкретных версий платформы при проведении реструктуризации. Использование версии 8.3.12 в качестве «мостика» для обновления — это наиболее эффективный практический прием, позволяющий сохранить данные и восстановить работоспособность РИБ без пересоздания узла.