Динамическое обновление информационных баз 1С — удобный инструмент, однако при его сбое или аварийном завершении работы сервера администраторы и разработчики часто сталкиваются с разрушением структуры метаданных. В результате база перестает открываться, возникает ошибка механизма SDBL, а в процессе тестирования и исправления появляются сообщения о недопустимых именах столбцов (например, _Fld61374).
В этой статье мы подробно разберем причинно-следственные связи возникновения ошибок SDBL, проанализируем устройство служебных таблиц 1С в СУБД и рассмотрев пошаговые алгоритмы полного восстановления работоспособности информационной базы.
Рассмотрим, что происходит внутри системы во время сбоя при динамическом обновлении:
ConfigSave: При запуске динамического обновления платформы 1С записывает новые метаданные во временную таблицу ConfigSave. Если процесс прерывается до момента успешного завершения, возникнет рассинхронизация между основной конфигурацией (таблица Config), структурой хранения данных (таблица DBSchema) и параметрами информационной базы (таблица Params).Config, DBSchema и DBNames из бэкапа приводят к тому, что платформенные GUID объектов метаданных перестают соответствовать физическим именам полей (_Fld) и таблиц (_Reference, _Document) в СУБД SQL.srvinfo). Даже если исправить таблицы в СУБД, сервер 1С продолжит читать устаревшие схемы из кэша, генерируя ошибки SDBL при выполнении запросов к данным.Проанализируем первый обязательный этап восстановления. Для того чтобы сбросить заблокированное состояние незавершенного обновления, необходимо полностью очистить кэш и удалить временную таблицу изменений.
Выполним очистку таблицы ConfigSave на стороне СУБД. Для этого выполним SQL-запрос:
DELETE FROM ConfigSave
После удаления записей из ConfigSave выполним последовательную очистку кэша:
AppData\Local\1C\1cv8 и AppData\Roaming\1C\1cv8).srvinfo (исключая файлы конфигурации самого кластера).Если после очистки кэша в конфигураторе объект открывается, но при получении структуры информационной базы или при выполнении проверок возникают ошибки по отсутствующим полям (например, Недопустимое имя столбца "_FldXXXXX"), заставим платформу принудительно пересчитать физическую структуру таблиц СУБД.
Разберем по шагам порядок действий:
ПланВидовХарактеристик или Документ).Если Конфигуратор успешно открывается в монопольном режиме, наименее рискованным методом устранения несоответствий между DBNames и таблицами SQL является пересоздание физических таблиц средствами платформы.
Рассмотрим данный процесс:
.dt..dt.При загрузке файла .dt платформа 1С создает таблицы СУБД «с нуля», наново генерируя соответствия между метаданными и физическими полями DBNames, что полностью исключает фантомные столбцы и конфликты GUID.
В случаях, когда базы восстанавливались путем подмены служебных таблиц из бэкапа (Config, DBSchema), физические имена таблиц в СУБД (например, Document31334) могут не совпадать с теми, которые ожидает система.
Соответствие между объектами метаданных 1С и наименованиями таблиц/полей в СУБД хранится в служебной таблице DBNames. Если имена столбцов рассогласовались, мы можем:
.cf через меню Конфигурация — Загрузить конфигурацию из файла (это заставит платформу перезаписать структуру DBSchema и DBNames).DBNames и сопоставления внутренних GUID объектов с реальными физическими полями SQL.ALTER TABLE ... RENAME COLUMN ..., чтобы привести их в полное соответствие с ожидаемой структурой DBNames.Чтобы избежать ошибок SDBL и разрушения структуры базы в будущем, следует придерживаться строгих регламентов работы:
.dt.