В процессе активной эксплуатации файловой информационной базы 1Cv8.1CD ее размер может достигать критических значений. Администраторы и разработчики часто сталкиваются с ситуацией, когда после выполнения свертки базы данных и полного удаления десятков тысяч помеченных объектов физический размер файла базы на диске не уменьшается ни на один мегабайт, а при попытке сформировать файл выгрузки *.dt возникает ошибка нарушения целостности информационной базы в таблице Files или Params.
Разберем детально внутреннее устройство файловой СУБД 1С, выясним причину такого поведения и пошагово рассмотрим способы физического сжатия базы данных, восстановления целостности и корректного резервного копирования.
Для понимания происходящего проанализируем архитектуру файлового хранилища 1С. Внутренний механизм файловой СУБД устроен таким образом, что при пометке на удаление и последующем окончательном удалении объектов из базы (документов, элементов справочников, движений регистров) физическое удаление данных из файла 1Cv8.1CD не происходит:
Физическое уменьшение файла базы данных и возврат пространства операционной системе возможны только при принудительном сжатии таблиц.
Основным штатным инструментом для освобождения незанятых блоков является режим тестирования и исправления информационной базы. Рассмотрим правильный порядок действий для сжатия базы:
1Cv8.1CD простым копированием на уровне файловой системы.После завершения процедуры сжатия размер файла 1Cv8.1CD уменьшится до реального объема фактически хранящихся данных.
Если запустить конфигуратор невозможно или требуется выполнить автономную проверку, воспользуемся утилитой chdbfl.exe, которая входит в комплект поставки технологической платформы 1С:
C:\Program Files\1cv8\8.3.X.XXXX\bin\ (или Program Files (x86)).chdbfl.exe.1Cv8.1CD.В процессе исправления утилита не только валидирует целостность страниц, но и выполняет реструктуризацию и уплотнение данных, что приводит к уменьшению общего размера базы на диске.
При выгрузке базы данных через меню Администрирование — Выгрузить информационную базу... нередко возникает критическая ошибка:
Нарушение целостности информационной базы. Ошибка в размере файла ***.pfls при выгрузке таблицы Files. Ожидаемое значение 0, значение в таблице...
Разберем природу данной ошибки:
.pfls представляют собой внутренние сериализованные структуры системных настроек форм, фильтров, отчетов и интерфейсов конкретных пользователей. Они хранятся в служебных таблицах Files и Params.*.dt. Утилита chdbfl.exe проверяет только физические страницы базы и не видит логических ошибок внутри контейнера файлов, поэтому рапортует об отсутствии ошибок, а выгрузка в *.dt падает.Поскольку файлы .pfls содержат исключительно пользовательские настройки интерфейса и форм, их удаление абсолютно безопасно для учетных данных (документов, проводок, справочников). При следующем входе пользователя настройки создадутся заново со значениями по умолчанию.
Для полного удаления сбойных записей настроек напишем и выполним внешнюю обработку со следующим кодом:
ВыборкаПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ТекПользователь Из ВыборкаПользователей Цикл
ИмяПользователя = ТекПользователь.Имя;
// Очищаем системные настройки интерфейса и форм
ХранилищеСистемныхНастроек.Удалить(Неопределено, Неопределено, ИмяПользователя);
// Очищаем общие настройки
ХранилищеОбщихНастроек.Удалить(Неопределено, Неопределено, ИмяПользователя);
// Очищаем сохраненные настройки отчетов
ХранилищеПользовательскихНастроекОтчетов.Удалить(Неопределено, Неопределено, ИмяПользователя);
КонецЦикла;
Выполнение данной процедуры очистит битые записи из системных таблиц Files и _SystemSettings, устранив причину блокировки выгрузки.
Если программная очистка не удалила поврежденный элемент (например, запись застряла в системных параметрах конфигурации), применим обходные технологические пути:
*.dt. Старая платформа сформирует файл без проверки сбойного заголовка.*.dt в пустую базу на MS SQL Server или PostgreSQL. В реляционных СУБД структура таблиц переформируется, а сбойные LOB-поля нормализуются.ВыгрузкаЗагрузкаДанныхXML.epf. Она переносит исключительно прикладные объекты метаданных в чистую базу, оставляя все поврежденные служебные кэши позади.Разберем важные системные правила, которые необходимо учитывать при сопровождении файловых баз большого объема:
*.dt предназначен исключительно для переноса данных между различными СУБД и создания демонстрационных баз. Резервной копией файловой базы 1С является исключительно прямая копия файла 1Cv8.1CD (или архивная копия, созданная специализированным ПО при остановленных сеансах)._DocumentJournal, _AccumRg) не превышает 4 ГБ.cnvstorage.exe. С ее помощью можно увеличить размер страницы базы данных с 4 КБ до 8, 16, 32 или 64 КБ, что позволяет поднять максимальный объем отдельной таблицы до 64 ГБ.