Как восстановить или заменить поврежденную таблицу CONFIG в базе 1С?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При аварийных сбоях, некорректном динамическом обновлении или сбоях файловой системы встроенная утилита проверки chdbfl может обнаружить ошибки в таблице метаданных CONFIG. В процессе «исправления» утилита нередко просто удаляет битые страницы и блоки файла 1CD. В результате удаляются описания структуры конфигурации, нарушается целостность дерева метаданных, и информационная база перестает запускаться в режиме 1С:Предприятие и Конфигуратор.

Проанализируем причины возникновения этой проблемы, а также пошагово разберем методы восстановления работоспособности как для клиент-серверного (SQL), так и для файлового варианта информационной базы.

Причины повреждения служебных таблиц конфигурации

Выясним, почему именно таблица CONFIG подвержена сбоям:

  1. Динамическое обновление («демонское обновление»): при сохранении изменений без завершения сеансов пользователей происходит обновление только измененных объектов. Сбой сети или питания в этот момент оставляет конфигурацию базы данных в рассогласованном состоянии.
  2. Сбои файлового доступа по сети: при многопользовательской работе с файловой базой через сетевую папку (SMB) протокол может терять пакеты данных или не успевать сбрасывать кэш на диск, что ведет к повреждению внутренних заголовков файла 1CD.
  3. Вмешательство антивирусов и систем теневого копирования: блокировка дескрипторов файлов в момент записи сжатых контейнеров метаданных нарушает транзакционную целостность.
  4. Особенности работы утилиты chdbfl: утилита контролирует физическую структуру блоков файла, но не проверяет логику сжатых потоков 1С. Обнуляя поврежденные сектора, она удаляет фрагменты метаданных, после чего база становится неработоспособной.

Вариант 1. Восстановление метаданных в клиент-серверном варианте (MS SQL Server)

Если база работает под управлением MS SQL Server, структура таблиц открыта для прямого доступа через SQL-запросы. Для восстановления метаданных потребуется копия базы (резервная копия или чистая база того же релиза).

Разберем список служебных таблиц, отвечающих за структуру конфигурации:

  1. Config — основная конфигурация.
  2. ConfigSave — сохраняемая конфигурация разработчика.
  3. DBSchema — схема базы данных.
  4. Params — системные параметры и настройки информационной базы.

Посмотрим на пример SQL-скрипта для переноса системных таблиц из базы-донора в поврежденную базу:


USE upp_target -- Имя поврежденной рабочей базы
GO 

-- Очищаем системные таблицы в битой базе
TRUNCATE TABLE [dbo].[Config];
TRUNCATE TABLE [dbo].[ConfigSave];
TRUNCATE TABLE [dbo].[DBSchema];
TRUNCATE TABLE [dbo].[Params];
GO 

-- Копируем данные из резервной копии (базы-донора)
INSERT INTO [dbo].[Config] SELECT * FROM [upp_backup].[dbo].[Config];
INSERT INTO [dbo].[DBSchema] SELECT * FROM [upp_backup].[dbo].[DBSchema];
INSERT INTO [dbo].[Params] SELECT * FROM [upp_backup].[dbo].[Params];
GO

После выполнения запроса необходимо запустить конфигуратор базы upp_target, внести незначительное изменение (например, в комментарий корня конфигурации) и нажать Обновить конфигурацию базы данных (F7).

Вариант 2. Восстановление файловой базы (.1CD) с помощью утилиты Tool_1CD

В файловой версии базы данных таблицы упакованы внутрь единого файла 1Cv8.1CD. Выполнить SQL-запросы напрямую нельзя, однако можно воспользоваться специализированной утилитой низкоуровневого редактирования Tool_1CD (версией с поддержкой редактирования и импорта таблиц).

Рассмотрим порядок действий по шагам:

  1. Создание резервной копии: обязательно сохраняем копию битого файла 1Cv8.1CD перед любыми манипуляциями.
  2. Подготовка базы-донора: разворачиваем эталонную базу той же конфигурации и версии (из бэкапа или путем создания пустой базы из дистрибутива .cf того же релиза).
  3. Экспорт таблиц: открываем файл базы-донора в утилите Tool_1CD и поочередно экспортируем во внешние файлы таблицы: CONFIG, CONFIGSAVE, PARAMS, DBSCHEMA.
  4. Импорт в поврежденный файл: открываем в Tool_1CD поврежденную базу данных, переходим к соответствующим таблицам и выполняем команду импорта (замены содержимого) ранее выгруженных файлов.
  5. Сохранение изменений: фиксируем изменения в файле и закрываем утилиту.

Устранение ошибки несоответствия схемы данных

Если таблицы метаданных были взяты из резервной копии другого релиза, при попытке открыть документы или выполнить операцию Тестирование и исправление платформа может выдать ошибку вида:

Ошибка SQL: Поле не найдено 'T1._Fld10678RRef'

Разберем причину ошибки: физическая таблица в базе содержит новые поля, добавленные недавними обновлениями, а подставленная старая конфигурация не содержит их описания в метаданных.

Для исправления ситуации используем следующий подход:

  1. Определяем, к какому объекту метаданных относится проблемное поле, с помощью вызова функции: СтруктураБазы = ПолучитьСтруктуруХраненияБазыДанных();
  2. Если объект метаданных известен (например, документ ПроизвольныйЭД), можно аналогично импортировать описание этой таблицы из базы с нужной версией метаданных либо загрузить актуальный файл конфигурации .cf через Конфигуратор без выполнения реструктуризации.
  3. Внимание: не запускайте операцию реструктуризации при наличии таких расхождений, пока не будет установлена точная версия конфигурации, иначе платформа физически удалит из базы все неизвестные ей колонки вместе с пользовательскими данными.
← На главную