К статье
Практический материал

Администрирование · 11 мин

Как исправить ошибку СУБД в 1С

Разбираем причины ошибок СУБД в 1С: повреждение таблиц, блокировки, сбои SQL-сервера. Пошаговые способы диагностики и восстановления базы без потери данных.

Ошибка СУБД в 1С означает, что платформа не смогла выполнить операцию с базой данных: прочитать таблицу, записать документ или получить блокировку. Текст ошибки обычно содержит фразы вроде «Ошибка СУБД: таблица повреждена», «Lock request time out», «Transaction deadlock» или коды SQL Server и PostgreSQL. Причина почти никогда не в самой 1С — она кроется в базе данных, дисковой подсистеме, сети или настройках сервера СУБД.

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

Подход к исправлению зависит от режима работы: файловая база (файл 1Cv8.1CD) или клиент-серверная (Microsoft SQL Server, PostgreSQL). Инструменты и риски в этих сценариях различаются, поэтому дальше материал разбит по типовым ситуациям.

Как понять, что именно сломалось: читаем текст ошибки

Формулировка ошибки — главный диагностический признак. «Ошибка формата потока» и «повреждён файл базы данных» указывают на физическую порчу файловой базы. «Could not continue scan with NOLOCK» или «database is suspect» — на проблемы в MS SQL Server. «Lock request time out period exceeded» и «deadlock victim» говорят не о повреждении, а о конкуренции сеансов за ресурсы.

Обязательно посмотрите технологический журнал 1С и журнал ошибок самой СУБД (для MS SQL — ERRORLOG, для PostgreSQL — postgresql-*.log). Там видно, какая таблица, индекс или запрос стали источником сбоя. Без этой информации любое «лечение» будет гаданием.

«Ошибка формата потока»Повреждение файловой базы

Проверить файл 1Cv8.1CD утилитой chdbfl

Lock timeout / deadlockПроблема блокировок, данные целы

Найти зависшие сеансы и тяжёлые запросы

Database suspect / ошибки ввода-выводаПроблема на стороне SQL Server или диска

Проверить ERRORLOG и состояние дисковой подсистемы

Ошибка только у одного пользователяЛокальная причина: кэш, клиент

Очистить кэш 1С, проверить сеть до сервера

Обязательные действия до начала исправления

Прежде всего сделайте резервную копию. Для файловой базы — скопируйте файл 1Cv8.1CD при отсутствии активных сеансов. Для серверной — выполните полный backup средствами СУБД, а не выгрузку в dt: выгрузка из повреждённой базы может оборваться или унаследовать дефект.

Зафиксируйте: точный текст ошибки, время, действие пользователя, номер релиза платформы и конфигурации. Это пригодится, если потребуется помощь специалиста, и поможет понять, воспроизводится ли ошибка после исправления.

Исправление файловой базы

Для файловых баз существует два основных инструмента. Первый — утилита chdbfl.exe из каталога bin установленной платформы. Она проверяет физическую целостность файла 1Cv8.1CD на низком уровне и умеет исправлять ошибки структуры страниц. Запускается на копии файла при закрытых сеансах: укажите путь к файлу, отметьте «Исправлять обнаруженные ошибки» и дождитесь результата.

Второй инструмент — «Тестирование и исправление» в конфигураторе (Администрирование → Тестирование и исправление). Оно работает на уровне логики данных: проверяет ссылочную целостность, пересчитывает итоги, перестраивает индексы. Для начала выбирайте режим «Тестирование» без исправления, чтобы оценить масштаб проблемы, и только потом включайте исправление.

Порядок имеет значение: сначала chdbfl (физика), затем тестирование в конфигураторе (логика). Если chdbfl не справилась, попробуйте выгрузку базы в dt и загрузку в новую пустую базу — при загрузке структура пересоздаётся заново, и часть дефектов уходит.

Порядок действий для файловой базы
  1. 1
    Завершите все сеансы и скопируйте файл 1Cv8.1CD в отдельный каталог
  2. 2
    Запустите chdbfl.exe на копии с включённым исправлением ошибок
  3. 3
    Откройте базу в конфигураторе и выполните «Тестирование и исправление» сначала в режиме только проверки
  4. 4
    При обнаружении логических ошибок повторите с исправлением, без удаления объектов
  5. 5
    Проверьте работу базы: открытие списков, проведение документов, построение отчётов

Исправление ошибок в клиент-серверной базе

В клиент-серверном варианте файл 1Cv8.1CD отсутствует, и chdbfl неприменима. Для MS SQL Server базовая проверка — команда DBCC CHECKDB, выполняемая в контексте нужной базы. Она покажет повреждённые страницы и индексы. Начинайте с варианта без исправления, чтобы понять масштаб.

sql
DBCC CHECKDB (N'MyBase') WITH NO_INFOMSGS;

Если повреждён только некластерный индекс, часто достаточно его перестроить командой ALTER INDEX ... REBUILD — это безопасная операция, не затрагивающая данные. Повреждение кластерного индекса или страниц данных серьёзнее: безопасный путь — восстановление из последней целой резервной копии, а не ремонт с потерей данных.

Для PostgreSQL прямого аналога CHECKDB нет. Проверяйте логи сервера на ошибки чтения страниц, при подозрении на повреждённые индексы выполняйте REINDEX, а для диагностики физической целостности существует утилита pg_amcheck (в современных версиях). Полная проверка дампом через pg_dump также косвенно выявляет нечитаемые данные.

Отдельно проверьте версию платформы 1С и её совместимость с версией СУБД. Часть «ошибок СУБД» после обновления SQL Server или PostgreSQL вызвана не повреждением, а несовместимостью — лечится обновлением платформы 1С до актуального релиза.

Ошибки блокировок: когда данные целы, а работать невозможно

Сообщения про таймауты блокировок и взаимоблокировки (deadlock) — самая частая «ошибка СУБД» в многопользовательских базах. Данные при этом не повреждены: один сеанс держит ресурс, другой ждёт и отваливается по таймауту. Типичные источники — зависшие сеансы, длительные регламентные задания, проведение больших документов в часы пик, неоптимальные запросы в доработках.

Найдите виновника через консоль кластера 1С (список сеансов, колонка времени последней активности) или через динамическое представление sys.dm_exec_requests в MS SQL. Завершите зависший сеанс штатно. Если взаимоблокировки повторяются, включите технологический журнал с событием TDEADLOCK и передайте результаты разработчику — обычно требуется переработка кода или индексов.

Маршрут решения

Как выбрать действие

Ошибка возникает у всех пользователей сразу и база не открываетсяПроверяйте физическую целостность: chdbfl или DBCC CHECKDB
Ошибка периодическая, в часы активной работыИщите блокировки и тяжёлые запросы, данные скорее всего целы
Ошибка появилась после обновления платформы или СУБДПроверьте совместимость версий и при необходимости обновите платформу
Ошибка только у одного пользователя на одном компьютереОчистите кэш 1С и проверьте сетевое подключение

Профилактика: как не довести до повторной ошибки

Большинство повреждений файловых баз связано с размещением файла на сетевом диске и обрывами связи, а также с аварийным выключением компьютера. Если база файловая и пользователей больше нескольких человек, правильное решение — переход на клиент-серверный вариант, а не регулярный ремонт.

Для серверных баз настройте регулярные полные резервные копии с проверкой восстановления (копия, которую никто не проверял, может оказаться битой). Следите за свободным местом на дисках с данными и журналом транзакций — переполненный диск является частой причиной остановки СУБД с ошибками. Регулярно обновляйте статистику и перестраивайте индексы: это снижает и нагрузку, и вероятность таймаутов.

Типичные ошибки
01
Запуск исправления без резервной копии — при неудаче откатиться не к чему
02
Включение в тестировании галочки удаления битых объектов — теряются документы и справочники без возможности восстановления
03
Использование chdbfl на файле, который в этот момент открыт пользователями — усугубляет повреждение
04
Перезагрузка сервера СУБД «для профилактики» во время ошибки ввода-вывода — может перевести базу в suspect
05
Игнорирование повторяющихся таймаутов блокировок — со временем перерастает в массовые отказы в часы пик

Когда самостоятельного исправления недостаточно

Есть ситуации, где самостоятельные действия с высокой вероятностью ухудшат результат: база в статусе suspect на MS SQL, повреждение страниц данных (а не индексов), ошибки ввода-вывода диска в логах, отсутствие ни одной рабочей резервной копии. В этих случаях остановите все работы с базой, снимите посекторную копию диска или скопируйте файлы данных и обращайтесь к специалистам по восстановлению.

Контрольные точки

Как проверить результат

Открытие базы и основных списков
Норма

База открывается, списки документов и справочников загружаются без ошибок

Тревожный признак

Ошибки при открытии отдельных таблиц или падение клиента

Проведение тестового документа
Норма

Документ проводится, движения записываются

Тревожный признак

Ошибка СУБД при записи или проведении

Повторная проверка целостности
Норма

chdbfl или DBCC CHECKDB завершаются без ошибок

Тревожный признак

Ошибки остались или появились новые

Журналы СУБД и технологический журнал
Норма

Нет новых ошибок ввода-вывода и повреждений

Тревожный признак

Ошибки повторяются — проблема глубже, вероятно в оборудовании

Частые вопросы

Можно ли исправить ошибку СУБД без потери данных?

В большинстве случаев да, если действовать аккуратно: сначала копия, затем проверка без исправления, и только потом ремонт. Потери обычно возникают при использовании режимов с удалением повреждённых объектов или REPAIR_ALLOW_DATA_LOSS — их стоит применять только как последнее средство на копии базы.

Чем отличается chdbfl от тестирования и исправления в конфигураторе?

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

Ошибка СУБД появляется только у одного пользователя. База повреждена?

Скорее всего нет. Локальная ошибка обычно связана с кэшем метаданных на клиенте, устаревшей версией платформы на конкретном компьютере или проблемами сети. Начните с очистки кэша 1С (удаление базы из списка и добавление заново) и проверки версии платформы.

Поможет ли переустановка платформы 1С?

Переустановка платформы не исправляет ни повреждённые данные, ни блокировки, ни ошибки SQL-сервера, потому что проблема находится в базе, а не в программе. Она оправдана только в редких случаях, когда повреждены сами файлы платформы — например, ошибка возникает на всех базах одного сервера сразу.

Как часто нужно делать резервные копии, чтобы ошибка СУБД не была катастрофой?

Ориентируйтесь на допустимый объём потери данных: если потеря одного рабочего дня недопустима, нужны ежедневные полные копии плюс копии журнала транзакций в течение дня для серверных баз. Критично не только делать копии, но и периодически проверять их восстановление на тестовом сервере.

Файловая база ломается уже несколько раз. Что делать?

Повторяющиеся повреждения файловой базы почти всегда означают системную причину: работа по сети с обрывами, нестабильный диск, антивирус, сканирующий файл базы, или аварийные выключения. Устраните причину — вынесите базу на сервер СУБД, исключите файл из антивирусной проверки, проверьте диск — иначе ремонт будет регулярным.

Итог

Что важно запомнить

Ошибка СУБД — это симптом, а не диагноз. Сначала резервная копия и анализ текста ошибки, затем инструмент под конкретный режим работы: chdbfl и тестирование для файловой базы, DBCC CHECKDB и анализ логов для серверной. Блокировки лечатся не ремонтом, а поиском зависших сеансов и тяжёлых запросов. Режимы с удалением данных — только на копии и только в крайнем случае.