Динамическое обновление конфигурации в 1С (в народе часто именуемое «демоническим») — удобный, но весьма рискованный инструмент. В файловых информационных базах формата 1Cv8.1CD любой сбой в момент сохранения или реструктуризации на лету часто приводит к полной блокировке входа как в пользовательском режиме («1С:Предприятие»), так и в режиме «Конфигуратор». Разберем подробно, почему это происходит и как восстановить работоспособность базы, используя резервную копию и специализированные инструменты.
Выясним причину возникновения ошибки. При обычном обновлении конфигурация базы данных монопольно блокируется и заменяется целиком. При динамическом же обновлении платформа 1С фиксирует изменения без отключения пользователей. В этот момент во внутренних служебных таблицах файла базы данных происходят следующие процессы:
CONFIG и CONFIGSAVE создаются специальные маркеры состояния и временные объекты с именами вроде commit, dbStruFinal, dynamicCommit и DynamicallyUpdated.1cv8.exe или переполнение кэша, база остается в промежуточном «зависшем» состоянии.При последующих попытках входа система выдает критические ошибки: «Обнаружена незавершенная операция сохранения конфигурации», «Ошибка формата потока» или «При обновлении данных, после последней реструктуризации, произошла критическая ошибка». При этом стандартная утилита проверки chdbfl.exe часто сообщает, что ошибок не обнаружено, поскольку физическая целостность блоков файла не нарушена — повреждена именно логическая цепочка версионирования метаданных.
Прежде чем приступать к низкоуровневой модификации файла базы данных, выполним обязательные базовые действия:
1Cv8.1CD в надежное место. Все дальнейшие манипуляции проводим исключительно с копией.%LOCALAPPDATA%\1C\1Cv8 и %APPDATA%\1C\1Cv8.Рассмотрим пример команды для сброса незавершенной транзакции обновления:
"C:\Program Files\1cv8\8.3.XX.XXXX\bin\1cv8.exe" DESIGNER /F "C:\Bases\MyBase" /RollbackCfg
Если откат не помог, можно также попробовать выполнить команду принудительного обновления конфигурации базы данных:
"C:\Program Files\1cv8\8.3.XX.XXXX\bin\1cv8.exe" DESIGNER /F "C:\Bases\MyBase" /UpdateDBCfg -Dynamic-
Если эти шаги не привели к успеху, перейдем к восстановлению таблиц конфигурации из бэкапа.
Проанализируем ключевое условие: динамическое обновление платформы 1С принципиально невозможно, если разработчик вносил изменения в структуру данных (добавлял новые реквизиты, менял типы, создавал новые объекты метаданных). Это означает, что структура таблиц данных в битой базе полностью совпадает со структурой в бэкапе недельной давности. Различаются только сами введенные данные и поврежденная таблица конфигурации.
Следовательно, мы можем взять валидную таблицу CONFIG (а также CONFIGSAVE и PARAMS) из недельной копии и перенести ее в рабочую базу. Для работы с файлами 1Cv8.1CD применим утилиту Tool_1CD.
Разберем по шагам весь процесс переноса:
1Cv8.1CD в программе Tool_1CD.CONFIG, CONFIGSAVE и PARAMS.Многие версии утилит прямого редактирования файлов 1Cv8.1CD корректно работают только с форматами базы 8.2.14 или 8.3.8 и не поддерживают напрямую формат 8.3.14+. В такой ситуации используем штатный конвертер платформы cnvdbfl.exe, расположенный в папке bin установленной платформы.
Посмотрим на алгоритм действий:
cnvdbfl.exe -c -f 8.2.14 "C:\Bases\DamagedBase\1Cv8.1CD"
cnvdbfl.exe -c -f 8.2.14 "C:\Bases\BackupBase\1Cv8.1CD"
CONFIG и CONFIGSAVE.
cnvdbfl.exe -c -f 8.3.14 "C:\Bases\DamagedBase\1Cv8.1CD"
Если актуального бэкапа нет или конфигурация в нем существенно устарела, можно попробовать очистить таблицу CONFIG от следов незавершенной транзакции.
Рассмотрим структуру таблицы CONFIG. В ней содержатся записи с именами файлов конфигурации. При аварии в таблице остаются строки commit и dbStruFinal. Если открыть таблицу в режиме редактирования через специализированные сборки утилит и пометить на удаление (или физически удалить) данные строки, платформа при следующем запуске пропустит проверку незавершенного динамического обновления и откроет базу в штатном режиме.
После того как замена таблицы произведена и Конфигуратор успешно запустился, обязательно выполняем регламентные процедуры проверки:
F7). Это заставит платформу заново пересчитать внутренние контрольные суммы и корректно пересобрать кэш метаданных.Таким образом, наличие даже недельного бэкапа позволяет полностью спасти накопленные пользовательские данные файловой базы и восстановить поврежденную таблицу метаданных без потерь.