При попытке выгрузить информационную базу в файл выгрузки (.dt) через Конфигуратор администраторы и разработчики нередко сталкиваются с аварийным завершением процесса: «Нарушена целостность информационной базы. Ошибка в размере файла ... при выгрузке таблицы FILES». В некоторых случаях система прямо указывает имя поврежденного элемента, например, словаря проверки орфографии userVocabulary_ru.new или внутреннего служебного блока.
Разберем природу возникновения этой ошибки, выясним причину столь строгого поведения платформы и подробно рассмотрим проверенные на практике способы восстановления работоспособности базы данных.
Служебная таблица FILES присутствует как в файловых базах (внутри 1Cv8.1CD), так и в клиент-серверных СУБД (dbo.Files). Она предназначена для хранения служебных данных конфигурации и пользовательских сеансов: настроек отчетов, форм, кэша динамических обновлений, внешних компонент и пользовательских словарей.
Проанализируем механику сбоя. В структуре таблицы для каждого сохраненного объекта отведены поля с числовым размером блока и само двоичное содержимое. Ошибка возникает тогда, когда значение в поле размера не совпадает с реальной длиной бинарных данных. Источниками такого расхождения обычно выступают:
.dt выполняет строгую проверку внутренней структуры информационной базы. Если ранние версии (например, 8.3.6) игнорировали мелкие расхождения и успешно формировали архив, то новые релизы принудительно прерывают процесс.Важное напоминание: выгрузка в файл .dt предназначена разработчиками платформы для смены СУБД или конвертации данных, а не для регулярного резервного копирования. Перед выполнением любых восстановительных операций обязательно создадим физическую копию каталога файловой базы или сделаем средствами СУБД бэкап клиент-серверной базы.
Чаще всего сбойные записи в таблице FILES связаны с пользовательскими настройками отображения списков, отчетов и диалогов. Самый простой и безопасный способ избавиться от проблемы, не прибегая к низкоуровневому вмешательству, — очистить сохраненные настройки сеансов.
Рассмотрим по шагам программное решение. Запустим базу в режиме «1С:Предприятие» под учетной записью с административными правами и выполним обработку со следующим кодом:
ВыборкаПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ТекПользователь Из ВыборкаПользователей Цикл
ХранилищеОбщихНастроек.Удалить(Неопределено, Неопределено, ТекПользователь.Имя);
ХранилищеПользовательскихНастроекДинамическихСписков.Удалить(Неопределено, Неопределено, ТекПользователь.Имя);
ХранилищеСистемныхНастроек.Удалить(Неопределено, Неопределено, ТекПользователь.Имя);
КонецЦикла;
Если требуется применить метод встроенного языка ОчиститьНастройкиПользователя(), его можно вызвать для каждого пользователя информационной базы:
ОчиститьНастройкиПользователя(ПользователиИнформационнойБазы.ТекущийПользователь);
В конфигурациях на обычных формах (например, ЗиУП 2.5) аналогичную очистку можно провести штатным интерфейсным путем: перейдем в меню Сервис — Настройка пользователей и удалим сохраненные настройки отчетов и форм.
Если база работает в файловом варианте, для устранения рассогласования индексов и таблиц применим штатную утилиту тестирования файла БД.
C:\Program Files\1cv8\8.3.X.XXXX\bin\) и запустим chdbfl.exe.1Cv8.1CD, установим флаг «Исправлять обнаруженные ошибки» и нажмем «Выполнить».Обратим внимание на важную особенность: утилита chdbfl.exe из состава платформы 8.3 не всегда фиксирует логические нестыковки старых форматов таблиц. Если проверка не выявила ошибок, а выгрузка по-прежнему падает, подключим утилиту chdbfl.exe от платформы 8.2 (например, релиза 8.2.19.130). Она более жестко сканирует таблицу FILES, journal-таблицы и индексы справочников, устраняя найденные несоответствия.
После физического исправления файла запустим Конфигуратор и выполним стандартную процедуру: меню «Администрирование» — «Тестирование и исправление...» с обязательными пунктами Реиндексация таблиц информационной базы и Проверка логической целостности.
В клиент-серверных базах (Microsoft SQL Server или PostgreSQL) мы имеем прямой доступ к таблице dbo.Files. Когда 1С сообщает точное имя файла (например, userVocabulary_ru.new) и указывает ожидаемый размер, проблему можно решить прямым запросом к СУБД.
Разберем по шагам порядок действий в Microsoft SQL Server Management Studio (SSMS):
dbo.Files.
DELETE FROM dbo.Files
WHERE FileName = 'userVocabulary_ru.new';
UPDATE dbo.Files
SET DataSize = DATALENGTH(BinaryData)
WHERE FileName = 'ИмяПроблемногоФайла';
0.Для СУБД PostgreSQL аналогичное выравнивание длины двоичного поля выполняется с помощью функции octet_length:
UPDATE files
SET datasize = octet_length(binarydata)
WHERE filename = 'ИмяПроблемногоФайла';
Если база файловая, а перевод на SQL-сервер не планируется, для прямого редактирования таблицы FILES применим специализированную утилиту (например, Tool_1CD):
FILES и найдем строку с поврежденным файлом.Если выгрузку базы данных необходимо получить срочно, а времени на детальную диагностику бинарных полей нет, используем различие в алгоритмах проверки платформы:
FILES еще не была внедрена, файл .dt сформируется успешно.Если при анализе целостности дополнительно возникает ошибка «Отсутствует таблица DBSCHEMA», это свидетельствует о нарушении соответствия между конфигурацией базы данных и таблицами хранения схемы метаданных. В этой ситуации выполним полную перезапись структуры:
.cf) в точности того же релиза, который установлен в рабочей базе.DBSCHEMA, не затрагивая при этом учетные данные в справочниках и документах.Если восстановить целостность файла базы не удается, а восстанавливать архивную копию нельзя из-за введенных первичных документов и сданной отчетности, перенесем накопленные данные в чистую базу:
ВыгрузкаЗагрузкаДанныхXML82.epf (версия для 8.3 выдаст ошибку режима совместимости).V8Exchan82.epf на базе правил обмена).