При обслуживании или обновлении файловых информационных баз 1С (файл 1Cv8.1CD) администраторы и разработчики нередко сталкиваются с ситуацией, когда стандартные средства диагностики оказываются бессильны. Штатная утилита проверки chdbfl.exe аварийно прерывает работу с сообщением вида «Синтаксическая ошибка (ID BINARY(16), NAME NVARCHAR(64)...)», тестирование и исправление (ТИИ) завершается аварийным падением процесса, а выгрузка в файл информационной базы (.dt) выдает ошибку СУБД о повреждении файла.
Разберем природу возникновения этой ошибки и детально изучим эффективные пути восстановления работоспособности базы данных.
В файловой СУБД 1С структура таблиц, списки полей, их типы и индексы хранятся в специальной системной области — таблице схемы базы данных (DBSCHEMA). При внезапном отключении питания, аппаратных сбоях дисковой подсистемы или сетевых тайм-аутах байтовая разметка страниц файла базы данных нарушается. В результате дескриптор таблицы повреждается или заполняется мусорными байтами.
Когда утилита chdbfl.exe начинает парсить внутреннюю схему и наталкивается на искаженное строковое описание типа поля (например, структуры колонок ID BINARY(16) или NAME NVARCHAR(64)), ее встроенный синтаксический анализатор не может распознать искаженные токены и прекращает работу. По этой же причине сторонние низкоуровневые утилиты анализа файлов 1Cv8.1CD могут выдавать системные исключения вида Range check error из-за нарушения цепочки адресации страниц.
Рассмотрим наиболее надежный и быстрый способ обхода повреждения, когда база открывается в режиме предприятия, но ее системные таблицы повреждены. Механизм распределенных информационных баз (РИБ) формирует новый файл базы данных с нуля, считывая данные через объектную модель 1С и записывая их в чистую структуру без переноса поврежденных системных страниц.
Разберем пошаговый алгоритм выполнения этой процедуры:
Полный в дереве метаданных). Если база типовая, используем существующий полный план обмена.ПБ). Текущий узел объявляем главным (код ЦБ).ПБ в отдельный каталог на диске.
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
После выполнения данной операции созданный файл 1Cv8.1CD полностью очищен от повреждений схемы, успешно проходит проверку chdbfl.exe, штатно обновляется и позволяет выполнять выгрузку в .dt.
Если повреждение затронуло конкретную прикладную таблицу (например, справочник Новости или таблицы версионирования объектов), попытка полной выгрузки данных через XML может приводить к падению процесса. В таких ситуациях эффективным решением является пообъектный перенос данных в чистую конфигурацию через COMConnector с пропуском битого объекта.
Рассмотрим пример кода для инициализации подключения и выборочной выгрузки данных:
// Подключение к поврежденной базе данных через COM-соединение
V83COM = Новый COMОбъект("V83.COMConnector");
СтрокаПодключения = "File=""C:\Bases\DamagedBase"";Usr=""Администратор"";Pwd="""";";
Попытка
БазаИсточник = V83COM.Connect(СтрокаПодключения);
Исключение
Сообщить("Ошибка подключения к базе данных: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
// Чтение данных рабочего справочника с исключением поврежденных таблиц
Выборка = БазаИсточник.Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
// Код переноса реквизитов объекта в целевую базу
КонецЦикла;
При использовании различных версий платформы полезно проверить внутреннюю версию формата файла базы данных. Начиная с версии платформы 8.3.8, формат файлов 1Cv8.1CD был изменен. Для анализа и конвертации структуры используется штатная консольная утилита cnvdbfl.exe, расположенная в каталоге bin установленной платформы.
Проанализируем параметры формата файла через командную строку Windows:
cnvdbfl.exe -i "C:\Bases\MyBase\1Cv8.1CD"
Параметр -i выводит версию формата (например, 8.2.14 или 8.3.8) и размер страницы данных (4096 байт или более). При необходимости смены формата для работы низкоуровневых анализаторов можно выполнить конвертацию формата параметров базы данных утилитой cnvdbfl.exe с соответствующими ключами совместимости.
Чтобы избежать подобных синтаксических ошибок в дескрипторах СУБД, рекомендуем соблюдать следующие правила эксплуатации файловых баз:
/DisableStartupMessages и периодической очисткой пользовательского кэша (/ClearCache).