Лечение повреждённой информационной базы 1С 8.3: chdbfl, тестирование, SQL и резервные копии

· 10 мин

Содержание

Если база 1С повреждена, начинайте с полной копии каталога базы или бэкапа СУБД, а уже потом лечите. Файловую базу проверяют утилитой chdbfl.exe из папки bin платформы, затем запускают в конфигураторе Администрирование → Тестирование и исправление. Клиент-серверную базу сначала проверяют средствами СУБД (DBCC CHECKDB в MS SQL). Не помогло — откатываются на последнюю исправную резервную копию.

Порядок важен. Каждая следующая ступень рискованнее предыдущей: утилита и тестирование могут удалить битые записи, и без копии вернуть их будет неоткуда. Способы одинаковы для любой конфигурации на платформе 8.3: БП 3.0, ЗУП 3.1, УТ 11 и других, потому что лечение идёт на уровне платформы и СУБД.

Признаки повреждения базы 1С и первая диагностика

Повреждение редко бывает «тихим». Обычно платформа сразу показывает сообщение при входе, при открытии списка или при проведении документа.

Типичные симптомы:

  • 🔴 при запуске: Файл базы данных поврежден или Неверный формат хранилища данных;
  • 🔴 при открытии отчёта или журнала: Ошибка формата потока;
  • 🔴 в конфигураторе: Нарушена целостность структуры конфигурации;
  • 🟠 в списках появляются строки вида <Объект не найден> (123:a1b2c3...);
  • 🟠 остатки в отчётах «плывут», хотя документы не меняли;
  • 🟠 программа закрывается без сообщения на одном и том же документе.

Что проверить за пять минут

  1. Запишите точный текст ошибки и момент, когда она появляется: при входе, в конкретном документе, при выгрузке.
  2. Узнайте, что произошло перед сбоем: отключение света, обрыв сети, зависание при обновлении, заполненный диск.
  3. Посмотрите свободное место на диске с базой. Меньше пары гигабайт — уже повод для сбоев записи.
  4. Для файловой базы откройте её каталог. Путь виден внизу окна запуска, когда база выделена в списке: строка File="D:\Bases\Buh".
  5. Проверьте, есть ли в каталоге файл 1Cv8.1CD и какого он размера. Размер 0 байт или сильно меньше обычного — плохой знак.

Сразу сделайте копию

Закройте все сеансы и скопируйте каталог базы целиком в другое место, лучше на другой диск. Для серверной базы снимите полный бэкап средствами СУБД. Ни одно лечение не начинайте без копии исходного состояния. Если исправление сделает хуже, вы сможете вернуться и попробовать другой способ.

Если база ещё открывается, попробуйте дополнительно выгрузить её в .dt: в конфигураторе Администрирование → Выгрузить информационную базу. Выгрузка сама по себе хороший тест: на повреждённых данных она часто падает с ошибкой, и это подтверждает диагноз.

Диагностика: выберите симптом

Утилита chdbfl.exe: как вылечить файловую базу

chdbfl.exe проверяет физическую целостность файла 1Cv8.1CD. Она работает только с файловыми базами и ничего не знает о конфигурации: её задача — починить сам файл так, чтобы платформа снова смогла его открыть.

Утилита лежит в каталоге установленной платформы, например:

C:\Program Files\1cv8\8.3.24.1548\bin\chdbfl.exe

Номер версии в пути будет вашим. Если установлено несколько платформ, берите утилиту из той версии, на которой работает база.

Порядок работы

  1. Убедитесь, что в базе никого нет. Утилите нужен монопольный доступ к файлу. ⚠️ Если кто-то ещё работает, предупредите людей: их сеансы придётся закрыть, несохранённые данные пропадут.
  2. Запустите chdbfl.exe от имени администратора.
  3. В поле с именем файла укажите путь к 1Cv8.1CD (кнопка выбора файла рядом с полем).
  4. Сначала запустите проверку без исправления: снимите флажок исправления ошибок и нажмите «Выполнить».
  5. Посмотрите протокол. Если ошибок нет — проблема не в файле, переходите к тестированию в конфигураторе.
  6. Если ошибки есть — поставьте флажок исправления и запустите ещё раз.

Проверка большого файла идёт долго: база на 10–20 ГБ может обрабатываться десятки минут. Не прерывайте процесс, даже если окно «зависло» — снятие задачи на середине исправления может добить файл.

Если утилита сама падает или останавливается на одном и том же месте, перенесите копию базы на локальный SSD и запустите там. Сетевой диск и медленный HDD часто дают обрыв на середине.

Если chdbfl не помогла

Бывает, что файл повреждён так сильно, что утилита не справляется. Варианты дальше:

  • 🔧 взять последнюю резервную копию и перенести в неё недостающие документы вручную или обменом;
  • 🔧 сторонние утилиты для чтения формата 1CD (например, Tool_1CD) — они умеют вытащить таблицы и конфигурацию из файла, который платформа уже не открывает. Работайте ими только с копией;
  • 🔧 обратиться к специалисту по восстановлению данных, если копий нет совсем.

Тестирование и исправление информационной базы в конфигураторе

Это второй и главный этап. Он работает для файловых и клиент-серверных баз и проверяет уже не файл, а данные: ссылки, итоги регистров, логическую структуру.

Путь: запустите базу в режиме «Конфигуратор» и откройте Администрирование → Тестирование и исправление. Режиму нужен монопольный доступ, поэтому всех пользователей нужно вывести из базы.

Какие флажки ставить

ПроверкаЧто делаетКогда включать
Реиндексация таблицПерестраивает индексыПочти всегда, безопасно
Проверка логической целостностиИщет нарушения структуры данныхПри ошибках формата потока, падениях
Проверка ссылочной целостностиИщет ссылки на несуществующие объектыПри <Объект не найден>
Пересчёт итоговЗаново считает итоги регистровКогда «плывут» остатки и обороты
Сжатие таблицУбирает пустое место в файлеДля файловой базы после чистки
Реструктуризация таблицПересоздаёт таблицы базыТолько при явных проблемах структуры, долго

Режимы обработки найденных ошибок

Внизу формы задаётся, что делать с проблемами:

  • Ссылки на несуществующие объекты. «Создавать объекты» — платформа создаст пустые объекты-заглушки, и вы потом разберётесь, чем их заполнить. «Очищать ссылки» — ссылка в документе станет пустой. «Не изменять» — только протокол.
  • Частичная потеря данных объектов. «Создавать объекты» или «Удалять объекты».

Для первого прогона выберите «Только тестирование» — увидите масштаб, ничего не меняя. Затем повторите в режиме «Тестирование и исправление». Безопаснее начинать с создания объектов: удалённую строку назад не вернуть, а заглушку можно потом найти и заполнить.

Запуск из командной строки

Для больших баз удобно запускать проверку ночью без участия человека:

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /F"D:\Bases\Buh" /N"Администратор" /P"пароль" /IBCheckAndRepair -ReIndex -LogAndRefsIntegrity -RecalcTotals -BadRefCreate -BadDataCreate /Out"D:\Logs\check.log"

Для серверной базы вместо /F укажите /S"сервер\имябазы". Ключ -TestOnly включает режим только тестирования. Протокол ищите в файле из параметра /Out.

После исправления откройте базу в режиме «1С:Предприятие» и проверьте ключевые отчёты: оборотно-сальдовую ведомость, остатки по складам, взаиморасчёты. Найдите созданные платформой объекты-заглушки — обычно их видно по пустым наименованиям — и разберитесь, откуда они.

Повреждённая клиент-серверная база на MS SQL или PostgreSQL

В клиент-серверном варианте chdbfl.exe не применяется: данные лежат в СУБД, и физическую целостность проверяет она. Тестирование в конфигураторе здесь второй шаг, а не первый.

MS SQL Server

  1. Сделайте полный бэкап базы средствами SQL Server.
  2. Запустите проверку в SQL Server Management Studio:
DBCC CHECKDB ('Buh') WITH NO_INFOMSGS, ALL_ERRORMSGS;
  1. Если ошибок нет — повреждение логическое, переходите к тестированию в конфигураторе.
  2. Если ошибки есть, в конце вывода SQL Server подскажет минимальный уровень исправления. Сначала пробуйте без потери данных:
ALTER DATABASE Buh SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DBCC CHECKDB ('Buh', REPAIR_REBUILD);
ALTER DATABASE Buh SET MULTI_USER;

REPAIR_ALLOW_DATA_LOSS — крайняя мера. Она удаляет повреждённые страницы вместе с данными, после неё логическая целостность базы 1С почти наверняка нарушится. Перед этим вариантом лучше проверить, нет ли свежего бэкапа.

SINGLE_USER WITH ROLLBACK IMMEDIATE обрывает все подключения, включая рабочие процессы 1С. Делайте это вне рабочего времени и предупредите пользователей.

PostgreSQL

Встроенного аналога DBCC CHECKDB нет. Практичный способ проверить читаемость данных — сделать полный дамп pg_dump: если какая-то таблица повреждена, дамп упадёт на ней с ошибкой. Индексы перестраивают командой REINDEX DATABASE имя_базы;. Для глубокой проверки индексов есть расширение amcheck.

Когда виновата не СУБД

Если СУБД ошибок не находит, а база падает, проверьте сеансовые данные и кэш сервера. Их очистка требует остановки службы агента сервера 1С, а это обрывает все сеансы всех баз на сервере. Делайте это только в согласованное окно и после проверки, что фоновые задания завершены.

Восстановление базы 1С из резервной копии

Если лечение не помогло или удалило слишком много, правильный путь — откат на последнюю исправную копию.

Тип копииКак восстановитьЧто потеряете
Выгрузка .dtКонфигуратор → Администрирование → Загрузить информационную базуВсё после даты выгрузки
Копия каталога файловой базыЗаменить 1Cv8.1CD файлом из копииВсё после даты копии
Полный бэкап MS SQLRESTORE DATABASE в SSMSЗависит от модели восстановления
Бэкап + журналы транзакцийВосстановление на момент времениМинуты до сбоя

Порядок действий:

  1. Восстановите копию в новую базу, а не поверх повреждённой. Так у вас останутся обе.
  2. Проверьте в новой базе: открывается ли, сходятся ли остатки на дату копии.
  3. Выясните, какие документы введены после даты копии. Источники: повреждённая база (если она частично читается), журнал регистрации, первичка, банк-клиент, ЭДО.
  4. Перенесите недостающее: выписки банка загрузите заново, документы из ЭДО — повторно, остальное — вручную или обменом из повреждённой базы, если она открывается.
  5. Только после проверки переключите пользователей на восстановленную базу.

Загрузка .dt полностью заменяет данные в базе-приёмнике. Перед загрузкой в существующую базу убедитесь, что это именно та база, которую не жалко перезаписать.

Если повреждена только конфигурация

Когда данные в порядке, а сломана структура конфигурации, данные можно спасти отдельно. Сохраните конфигурацию базы в файл (Конфигурация → Сохранить конфигурацию в файл) и сравните с исходной поставкой. Если доработок нет, загрузите в базу типовую конфигурацию того же релиза из .cf. Доработанную конфигурацию берут из хранилища или из копии у разработчика.

Как защитить базу 1С от повреждений

Большинство повреждений связаны с аварийной остановкой записи. Отсюда и меры.

  • 🔌 ИБП на компьютер или сервер с базой. Отключение питания во время записи — классическая причина битого 1Cv8.1CD.
  • 🌐 Файловая база в сети. Не открывайте её по Wi-Fi и через VPN с нестабильным каналом. Когда пользователей становится больше пяти-десяти, стоит подумать о публикации на веб-сервере или переходе на клиент-серверный вариант.
  • 🛡 Антивирус. Добавьте каталог базы и файлы *.1CD в исключения сканирования в реальном времени. Антивирус, который блокирует файл на чтение во время записи, провоцирует сбои.
  • 💾 Свободное место. Следите за диском с базой и с каталогом временных файлов.
  • 🔄 Обновления. Не прерывайте обновление конфигурации и реструктуризацию, даже если они идут час.
  • 📦 Резервные копии по расписанию. Ежедневная выгрузка или копия, хранение не меньше недели, копия вне сервера. Раз в месяц проверяйте, что копия разворачивается.
  • 🩺 Регламентная проверка. Раз в месяц-квартал — тестирование с реиндексацией и пересчётом итогов в нерабочее время.

Для серверных баз добавьте регламентные задания СУБД: регулярные бэкапы, DBCC CHECKDB по расписанию на MS SQL, контроль журналов транзакций.

Регламент защиты базы от повреждений
Выполнено: 0 / 6

Частые вопросы о повреждённой базе 1С

Можно ли запускать chdbfl.exe для клиент-серверной базы?
Нет. Утилита работает только с файлом 1Cv8.1CD файловой базы. Для серверной базы целостность проверяют средствами СУБД, а затем тестированием в конфигураторе.
Сколько времени идёт тестирование и исправление?
Зависит от размера базы и выбранных флажков. Реиндексация небольшой базы — минуты. Полная проверка с реструктуризацией базы на десятки гигабайт может занять несколько часов, поэтому её запускают ночью.
Потеряю ли я данные при лечении базы?
Можете. Режимы «Удалять объекты» и REPAIR_ALLOW_DATA_LOSS удаляют повреждённые записи. Поэтому сначала копия, потом «Только тестирование», затем исправление с созданием объектов-заглушек.
Почему после исправления появились пустые элементы справочников?
Это объекты, созданные в режиме «Создавать объекты» вместо битых ссылок. Найдите их, заполните по первичке или замените на правильные элементы и пометьте заглушки на удаление.
Помогает ли выгрузка и загрузка .dt вылечить базу?
Иногда да: при загрузке таблицы создаются заново. Но если данные уже повреждены, выгрузка часто падает. Тогда сначала тестирование и исправление, затем выгрузка-загрузка.