База 1С не открывается: тестирование, chdbfl, бэкапы и SQL
Содержание
Восстановить базу 1С 8.3 можно тремя путями: исправить файл базы утилитой chdbfl.exe и режимом Конфигуратор → Администрирование → Тестирование и исправление, загрузить свежую выгрузку .dt или поднять резервную копию СУБД (для клиент-серверной базы на SQL Server или PostgreSQL). Выбор зависит от того, что именно сломалось: файл, данные внутри него или вся база целиком.
Порядок простой. Сначала копия того, что есть сейчас, даже если база битая. Потом диагностика. И только потом лечение — от мягких способов к жёстким. Всё ниже относится к платформе 8.3 и подходит для любой конфигурации: Бухгалтерии, ЗУП, УТ, ERP.
Сначала копия, потом диагностика: что сломалось
Прежде чем что-то чинить, скопируйте каталог базы целиком (для файловой) или сделайте бэкап СУБД (для серверной). Любое исправление может удалить часть данных — без копии назад дороги не будет.
Дальше определите тип поломки. По симптому это обычно видно сразу.
| Симптом | Вероятная причина | С чего начать |
|---|---|---|
Файл базы данных поврежден при входе | Повреждён 1Cv8.1CD после сбоя питания или обрыва сети | chdbfl.exe |
Ошибка формата потока | Битый кэш или повреждённые данные конфигурации | Очистка кэша, затем тестирование |
Нарушение целостности структуры конфигурации | Сбой при обновлении | Тестирование с реструктуризацией или загрузка .dt |
| База открывается, но отчёты «врут», остатки уходят в минус | Испорчены итоги регистров | Пересчёт итогов |
Битые ссылки в документах — <Объект не найден> | Удалены объекты, на которые ссылались другие | Проверка ссылочной целостности |
| Не подключается к серверу, файлы на месте | Проблема в кластере 1С или СУБД, а не в данных | Журнал регистрации, логи СУБД |
Где смотреть журнал регистрации
Если база запускается хотя бы в Конфигураторе, откройте Администрирование → Журнал регистрации. В Бухгалтерии 3.0 и ЗУП 3.1 в режиме предприятия он лежит в Администрирование → Обслуживание → Журнал регистрации.
Отфильтруйте события по уровню «Ошибка» за время, когда всё сломалось. Там видно, кто работал, какая операция шла последней и какой текст ошибки вернула платформа. Часто причина находится за пять минут: обновление, прерванное посреди реструктуризации, или обмен, загрузивший мусор.
Журнал хранится в подкаталоге 1Cv8Log рядом с файлом базы (для файловой) или в каталоге кластера на сервере. Если база не открывается вовсе, журнал из копии можно подключить к пустой базе и прочитать там.
Для серверной базы добавьте к журналу логи СУБД: в SQL Server — журнал ошибок в SQL Server Management Studio, в PostgreSQL — файлы в каталоге log кластера. Сообщения о повреждённых страницах данных означают, что лечить надо на уровне СУБД, а не 1С.
Как восстановить файловую базу 1С
Файловая база — это один файл 1Cv8.1CD в каталоге базы. Чаще всего он портится при отключении электричества, обрыве сети на общей папке или нехватке места на диске. Лечат его в два этапа.
Этап 1. Утилита chdbfl.exe
Это штатная утилита платформы для проверки физической целостности файла. Она лежит в каталоге установленной платформы: C:\Program Files\1cv8\<номер версии>\bin\chdbfl.exe.
- Закройте базу у всех пользователей. Утилита не работает с файлом, который кто-то держит открытым.
- Скопируйте каталог базы в другое место.
- Запустите
chdbfl.exeот имени администратора. - В поле «Имя файла БД» укажите путь к
1Cv8.1CD. - Сначала запустите проверку без исправления, чтобы увидеть масштаб поломки.
- Затем включите флажок «Исправлять обнаруженные ошибки» и запустите ещё раз.
Если утилита завершилась без ошибок — пробуйте открыть базу . Если она сообщает, что файл не удаётся восстановить, переходите к этапу 2 или к резервной копии.
Берите chdbfl.exe той же версии платформы, на которой работает база. Утилита из другой версии может неверно прочитать формат файла.
Этап 2. Тестирование и исправление в Конфигураторе
Второй этап проверяет уже логику данных: индексы, ссылки, итоги.
- Откройте базу в Конфигураторе.
- Выберите
Администрирование → Тестирование и исправление. - Отметьте проверки (разбор флажков — в таблице ниже).
- В блоке «Тестирование и исправление» выберите режим исправления, а не только тестирования.
- Нажмите «Выполнить» и дождитесь итогового сообщения в окне служебных сообщений.
| Флажок | Что делает | Когда включать |
|---|---|---|
| Реиндексация таблиц информационной базы | Перестраивает индексы | Почти всегда, безопасно |
| Проверка логической целостности | Ищет нарушения в структуре данных | При ошибках формата и странных сбоях |
| Проверка ссылочной целостности | Ищет ссылки на несуществующие объекты | При <Объект не найден> |
| Пересчёт итогов | Пересчитывает итоги регистров | Остатки не сходятся |
| Сжатие таблиц | Убирает удалённые записи, уменьшает файл | После массового удаления |
| Реструктуризация таблиц | Пересоздаёт таблицы по структуре метаданных | При нарушении целостности структуры, крайний случай |
Для битых ссылок есть выбор: создать объекты-заглушки, очистить ссылки или не изменять. Выбирайте «Создавать объекты» — так документы сохранят связи, а заглушки потом можно найти и заполнить вручную. Очистка ссылок стирает данные в реквизитах, и вернуть их без бэкапа нельзя.
Для повреждённых объектов тоже два варианта: создать их по частичным данным или удалить. Удаление выбирайте, только если есть копия.
Запуск тестирования из командной строки
Если база не открывается в Конфигураторе даже после chdbfl.exe, тестирование можно запустить пакетно. Пример для файловой базы:
"C:\Program Files\1cv8\8.3.24.1691\bin\1cv8.exe" DESIGNER /F "D:\Bases\Buh" /N "Администратор" /P "пароль" /IBCheckAndRepair -ReIndex -LogIntegrity -RecalcTotals -BadRefCreate /Out "D:\Bases\check.log"
Номер версии в пути замените на свой. Результат пишется в файл из параметра /Out — его стоит прочитать, даже если окно закрылось без вопросов.
Восстановление клиент-серверной базы на SQL Server и PostgreSQL
В серверном варианте данные лежат в СУБД, и файла 1Cv8.1CD нет. chdbfl.exe тут бесполезна. Логику данных по-прежнему лечит тестирование в Конфигураторе, а физику — средства самой СУБД.
Проверка базы средствами SQL Server
В SQL Server Management Studio выполните проверку целостности:
DBCC CHECKDB ('Buh') WITH NO_INFOMSGS, ALL_ERRORMSGS;
Если ошибок нет — проблема на стороне 1С, переходите к тестированию в Конфигураторе. Если есть — сначала восстанавливайте бэкап СУБД.
Режим REPAIR_ALLOW_DATA_LOSS у DBCC CHECKDB — крайняя мера. Он требует однопользовательского режима базы и, как следует из названия, может выбросить часть данных. Перед ним — копия базы и согласие владельца данных.
PostgreSQL
Для PostgreSQL штатного аналога DBCC CHECKDB нет. Практика другая: при повреждениях восстанавливают последнюю копию pg_dump или физический бэкап кластера. Если логи сервера пишут об ошибках чтения страниц, первым делом проверьте диск — с ним проблема чаще, чем с самой СУБД.
Когда виноват не SQL, а кластер 1С
Бывает, что данные в порядке, а база не открывается из-за испорченного сеансового кэша сервера 1С. Типичный приём — очистка кэша кластера:
- Предупредите пользователей: все сеансы оборвутся, несохранённые документы пропадут. Делайте это вечером или в обед.
- Остановите службу «Агент сервера 1С:Предприятия 8.3».
- В каталоге кластера (
srvinfo\reg_1541) удалите папкиsnccntx…. - Запустите службу.
Файлы реестра кластера (1CV8Clst.lst) не трогайте: в них описаны все базы и настройки кластера.
Откат из резервной копии: .dt, бэкап СУБД и копия каталога
Когда исправление не помогло или удалило слишком много, база поднимается из копии. Способ зависит от того, что у вас есть.
| Что есть | Как восстановить | Что потеряете |
|---|---|---|
| Копия каталога файловой базы | Заменить каталог базы скопированным | Всё, что внесли после копии |
Выгрузка .dt | Администрирование → Загрузить информационную базу в Конфигураторе | То же, плюс нужен монопольный доступ |
| Полный бэкап SQL Server | Restore Database в SSMS | Данные после бэкапа |
| Полный бэкап + бэкапы журнала транзакций | Restore на момент времени (point-in-time) | Минуты до сбоя |
| Дамп PostgreSQL | pg_restore в пустую базу | Данные после дампа |
Загрузка выгрузки .dt
- Откройте базу в Конфигураторе. Если исходная не открывается — создайте новую пустую базу и откройте её.
- Выберите
Администрирование → Загрузить информационную базу. - Укажите файл
.dtи подтвердите замену.
Загрузка .dt полностью заменяет данные и конфигурацию базы. Если открываете рабочую базу, сначала выгрузите текущее состояние в отдельный .dt — на случай, если копия окажется старее, чем думали.
Пакетный вариант для ночного восстановления в тестовую базу:
"C:\Program Files\1cv8\8.3.24.1691\bin\1cv8.exe" DESIGNER /F "D:\Bases\Test" /N "Администратор" /P "пароль" /RestoreIB "D:\Backup\buh.dt" /Out "D:\Backup\restore.log"
Бэкап SQL на момент времени
Восстановление «на 14:30 перед сбоем» работает только при модели восстановления Full и регулярных бэкапах журнала транзакций. При модели Simple есть только полные и разностные копии — данные откатятся на момент последней.
После восстановления бэкапа СУБД в другую базу её нужно зарегистрировать в кластере 1С: в консоли администрирования серверов создайте информационную базу и укажите имя базы в СУБД. Флажок «Создать базу данных в случае её отсутствия» не нужен — база уже есть.
Резервная копия из режима предприятия
В Бухгалтерии 3.0 и других конфигурациях на БСП есть Администрирование → Обслуживание → Резервное копирование и восстановление. Там же — восстановление из копии, сделанной этим механизмом. Он работает только для файловых баз; серверные копируют средствами СУБД.
Монопольный режим и блокировки: как выгнать всех из базы
Тестирование и исправление, загрузка .dt и обновление структуры требуют монопольного доступа. Если в базе висит хоть один сеанс, Конфигуратор откажет.
Файловая база
- Попросите пользователей выйти, затем проверьте
Администрирование → Активные пользователив Конфигураторе. - Если сеансы «зависли» после сбоя, а людей в базе точно нет, закройте процессы
1cv8.exeи1cv8c.exeна компьютерах, откуда открывали базу. - Убедитесь, что файл
1Cv8.1CLв каталоге базы не занят. Это служебный файл блокировки. Удалять его можно только когда базу точно никто не держит, иначе вы испортите данные работающим людям.
Серверная база
В режиме предприятия откройте Администрирование → Обслуживание → Блокировка работы пользователей. Задайте сообщение, время и код разрешения. Пользователи получат предупреждение, а через несколько минут сеансы завершатся.
Чтобы войти в заблокированную базу самому, добавьте в строку запуска ключ /UC с кодом разрешения:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S "srv1c\buh" /UC 12345
Альтернатива — консоль администрирования серверов: в свойствах базы включить блокировку начала сеансов и задать код. Отдельные сеансы там же можно удалить вручную. Для проверки из командной строки подойдёт rac session list — параметры смотрите в rac help.
Не забудьте снять блокировку после работ. Забытая блокировка выглядит для пользователей как новая авария, и утром телефон не замолкает.
Чтобы восстанавливать не пришлось: регламент обслуживания
Хорошо настроенное обслуживание превращает аварию в рутину на полчаса.
Резервное копирование
- 💾 Файловая база — ежедневная копия каталога базы скриптом по расписанию Windows или через встроенное резервное копирование БСП. Хранить минимум 7 последних копий.
- 🗄 SQL Server — план обслуживания: полный бэкап раз в сутки, бэкап журнала транзакций каждые 15–60 минут.
- 🐘 PostgreSQL — ночной
pg_dumpв формате custom (-Fc) по cron или планировщику. - 📦 Выгрузка .dt — перед каждым обновлением конфигурации, вручную.
- 🏠 Хранение — хотя бы одна копия на другом физическом диске или сервере. Копия на том же диске умирает вместе с ним.
Пример простого скрипта для файловой базы:
set d=%date:~6,4%-%date:~3,2%-%date:~0,2%
robocopy "D:\Bases\Buh" "E:\Backup\Buh_%d%" /E /R:1 /W:1
Копируйте каталог, когда в базе никто не работает, — например, в 23:00. Копия открытой базы может оказаться несогласованной.
Регламентное обслуживание СУБД
Для SQL Server настройте в плане обслуживания перестроение индексов и обновление статистики раз в неделю, плюс DBCC CHECKDB — чтобы узнать о порче страниц до того, как она доберётся до бухгалтера. Для PostgreSQL — VACUUM ANALYZE по расписанию.
Проверьте, что бэкап живой
Копия, которую ни разу не разворачивали, — это надежда, а не бэкап. Раз в месяц загрузите свежий .dt или бэкап СУБД в тестовую базу и откройте пару отчётов.
Частые вопросы о восстановлении базы 1С
Можно ли восстановить удалённый документ без резервной копии?
Сколько длится тестирование и исправление?
Почему после восстановления .dt не работает обмен с другими базами?
Нужно ли восстанавливать базу, если ошибка только у одного пользователя?
/ClearCache или удалите базу из списка и добавьте снова.