При обслуживании и переносе баз данных 1С специалисты нередко сталкиваются с ситуацией, когда штатная выгрузка информационной базы в файл .dt завершается аварийно с сообщением о нарушении целостности или непредвиденной ошибке. При этом база может штатно открываться в режиме 1С:Предприятие, пользователи продолжают работать, а стандартная утилита chdbfl.exe и тестирование через Конфигуратор не выявляют физических повреждений таблиц. Разберем по шагам, почему возникает эта проблема и какими способами можно восстановить корректную работу базы.
Выясним причину такого поведения платформы. Механизм создания файла выгрузки .dt кардинально отличается от простого копирования файла базы данных 1Cv8.1CD. В процессе выгрузки платформа выполняет полную последовательную сериализацию всех таблиц и внутренних хранилищ в единый упакованный поток данных. Сбой может произойти по следующим причинам:
ХранилищеЗначения. Утилита chdbfl.exe проверяет только физическую разметку страниц файла 1Cv8.1CD, но не валидирует внутреннюю структуру упакованных сериализованных объектов. Если один из таких объектов поврежден, при попытке распаковать и переупаковать его в поток .dt платформа генерирует ошибку целостности.1Cv8.lgd или файлы старого формата логов могут блокировать монопольные служебные операции.Проанализируем наиболее частую причину сбоя — накопление поврежденных пользовательских настроек (косвенным признаком этой проблемы часто являются спонтанные ошибки входа в базу у отдельных пользователей). Для полного удаления битых системных настроек используем внешнюю обработку или запуск кода во внешней обработке в режиме 1С:Предприятие от имени администратора.
Посмотрим на пример программного кода для пакетной очистки настроек всех зарегистрированных пользователей:
МассивП = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Ит = 0 По МассивП.ВГраница() Цикл
ТекущийПользователь = МассивП[Ит];
Сообщить("Обработка настроек пользователя: " + ТекущийПользователь.ПолноеИмя);
ОчиститьНастройкиПользователя(ТекущийПользователь);
КонецЦикла;
Рассмотрим подробнее работу данного фрагмента: функция ПользователиИнформационнойБазы.ПолучитьПользователей() считывает список всех учетных записей базы данных, а встроенная процедура ОчиститьНастройкиПользователя() удаляет сохраненные пользовательские варианты отчетов, настройки динамических списков и позиции окон, гарантированно очищая поврежденные записи в служебных таблицах.
После очистки настроек выполним проверку конфигурации и таблиц базы данных в Конфигураторе:
Если ошибки в бинарных полях не удается устранить стандартными средствами, применим гарантированный способ переноса рабочей информации в новую чистую базу без системного мусора:
.cf)..dt из новой базы — процедура пройдет штатно, так как база не содержит поврежденных системных записей.Разберем дополнительные системные факторы, которые могут препятствовать выгрузке:
1Cv8Log (или файл 1Cv8.lgd). Запустим Конфигуратор и повторим операцию выгрузки.Обратим внимание на архитектурные стандарты платформы: формат .dt предназначен исключительно для переноса данных между различными типами СУБД (например, при миграции с файловой базы на PostgreSQL или MS SQL Server) и создания стендов для разработки. Использовать .dt как основное средство ежедневного резервного копирования не рекомендуется.
Для надежного резервного копирования файловых баз следует выполнять прямое копирование файла 1Cv8.1CD (при полном отключении всех активных сеансов пользователей) либо использовать технологии теневого копирования томов (VSS). Для клиент-серверных вариантов резервные копии необходимо создавать встроенными средствами используемой СУБД.