Проверка базы идёт часами: как безопасно прервать её и что сделать после

· 9 мин

Содержание

Остановить тестирование и исправление в 1С можно только одним надёжным способом: завершить сеанс Конфигуратора, в котором запущена проверка. В файловой базе это процесс 1cv8.exe в Диспетчере задач. В клиент-серверной — ещё и сеанс в консоли кластера, а при долгом откате — запрос в СУБД.

Типичная ситуация: вечером администратор запустил Администрирование → Тестирование и исправление... в Конфигураторе, утром пришли бухгалтеры, а в строке состояния всё та же таблица. Прервать проверку можно, но правильно — сначала понять, на каком этапе она стоит, и только потом действовать. Иначе можно получить базу, которая не откроется.

Сначала убедитесь, что проверка действительно зависла

Долгая проверка и зависшая проверка — разные вещи. Реиндексация или сжатие таблицы регистра на 30–50 ГБ может идти несколько часов, и прервать её на 90% обиднее всего.

Что смотреть до любых действий:

  1. 📊 Строку состояния Конфигуратора. Там видно текущий этап и имя таблицы. Запишите, что там написано, и проверьте снова через 10–15 минут.
  2. 💽 Диск. Откройте resmon.exe (Монитор ресурсов) → вкладка «Диск». Если процесс 1cv8.exe (файловая база) или процесс СУБД (sqlservr.exe, postgres.exe) читает и пишет мегабайты в секунду — работа идёт.
  3. 🧠 Процессор. На сервере 1С посмотрите загрузку процессов rphost.exe. Постоянная нагрузка одного ядра — признак работы, а не зависания.
  4. 🗄️ Запрос в СУБД. Для клиент-серверной базы самый точный ответ даёт сама СУБД — запросы приведены ниже.

Этапы проверки и чем опасно прерывание на каждом

Этап (флажок в окне режима)Что делаетРиск при прерывании
Реиндексация таблицПерестраивает индексыНизкий: повторная реиндексация всё исправит
Проверка логической целостностиЧитает структуры данныхНизкий: данные не меняются
Проверка ссылочной целостностиИщет «битые» ссылки, создаёт объекты или очищает ссылкиСредний: часть ссылок уже исправлена
Пересчёт итоговПересчитывает итоги регистровСредний: итоги нужно досчитать
Сжатие таблицКопирует таблицы без пустых страницВысокий в файловой базе
Реструктуризация таблицПересоздаёт таблицы базыСамый высокий: прерывать только в крайнем случае

Если проверка стоит на реструктуризации или сжатии в файловой базе и диск ещё работает — лучше дождаться конца. Если диск молчит 30–40 минут, а процессор в нуле, это похоже на настоящее зависание.

На каком этапе остановилась проверка?

Как прервать тестирование и исправление: завершение сеанса Конфигуратора

Режим запускается в монопольном доступе, поэтому, кроме вашего Конфигуратора, к базе никто не подключён. Это упрощает дело: обрывать чужую работу не придётся.

Если в базе остались фоновые задания или сеансы обмена, их завершение оборвёт обмен. Делайте это, когда пользователи предупреждены.

Шаг 1. Закройте Конфигуратор или завершите процесс

  1. Если Конфигуратор откликается на действия — попробуйте закрыть окно обычным способом и подтвердить выход.
  2. Если окно «Не отвечает» дольше получаса, а признаков работы нет — откройте Диспетчер задач (Ctrl+Shift+Esc).
  3. На вкладке «Подробности» найдите 1cv8.exe. Если процессов несколько, ориентируйтесь на столбец «Командная строка»: у Конфигуратора там будет DESIGNER.
  4. Нажмите «Снять задачу».

Если проверку запускал планировщик заданий Windows через командную строку, сначала завершите задачу в taskschd.msc, иначе по расписанию она стартует снова.

Шаг 2. Освободите базу

После снятия процесса база не всегда сразу становится доступной.

  • 📁 Файловая база в сетевой папке. На сервере с папкой откройте compmgmt.msc → Общие папки → Открытые файлы. Если там висит 1Cv8.1CD, закройте этот открытый файл.
  • 🖥️ Клиент-серверная база . Откройте консоль администрирования серверов 1С → кластер → информационная база → «Сеансы». Сеанс с приложением «Конфигуратор» удалите через контекстное меню.

Через утилиту rac то же самое делается командами:

rac cluster list
rac session list --cluster=<id кластера> --infobase=<id базы>
rac session terminate --cluster=<id кластера> --session=<id сеанса>

Если на кластере задан администратор, добавьте параметры авторизации — их список выдаёт rac help session.

Если «зависла» не проверка, а её запуск

Иногда режим даже не начинает работу: Конфигуратор ждёт монопольного доступа или показывает ошибку его установки. Значит, к базе кто-то подключён.

  • 👥 Посмотрите активных пользователей: в Конфигураторе Администрирование → Активные пользователи.
  • ⚙️ Фоновые задания и обмены тоже держат базу. На время проверки включите блокировку регламентных заданий в свойствах базы в консоли кластера.
  • 🔌 Висящие сеансы пользователей, которые давно ушли, удалите в консоли кластера.

В этом случае останавливать нечего: закройте окно ожидания, освободите базу и запустите режим заново.

Транзакции СУБД: почему клиент-серверная база «не отпускает»

В клиент-серверной базе тяжёлую работу выполняет не Конфигуратор, а рабочий процесс сервера 1С и сама СУБД. Вы закрыли Конфигуратор, а сервер СУБД ещё несколько минут или часов дорабатывает либо откатывает начатую операцию.

Что успело зафиксироваться, останется в базе. Незавершённая операция откатится. Откат большой реиндексации или сжатия может длиться столько же, сколько сама операция.

MS SQL Server

Найдите активные запросы по базе (в SQL Server Management Studio):

SELECT session_id, status, command, percent_complete,
       wait_type, start_time
FROM sys.dm_exec_requests
WHERE database_id = DB_ID('buh_base');
  • command покажет операцию: ALTER INDEX, UPDATE, KILLED/ROLLBACK.
  • percent_complete для откатов и операций с индексами показывает прогресс.

Если сеанс 1С уже удалён, а запрос продолжает выполняться, его можно прервать:

KILL 57;                  -- 57 = session_id из запроса выше
KILL 57 WITH STATUSONLY;  -- прогресс отката

KILL не ускоряет откат. Он запускает его, и прервать откат уже нельзя. Не перезапускайте службу SQL Server во время отката: после старта база уйдёт в восстановление, и откат продолжится, только база при этом будет недоступна целиком.

PostgreSQL

SELECT pid, state, wait_event_type, query_start,
       left(query, 120) AS query
FROM pg_stat_activity
WHERE datname = 'buh_base';

Сначала мягкая отмена запроса, при неудаче — завершение соединения:

SELECT pg_cancel_backend(12345);     -- 12345 = pid
SELECT pg_terminate_backend(12345);

💡 Прежде чем снимать что-то в СУБД, удалите сеанс в консоли кластера 1С и подождите 5–10 минут. Часто рабочий процесс сам отменяет запрос, и вмешательство в СУБД не нужно.

Файловая база после прерывания: проверка файла 1Cv8.1CD

В файловой базе все данные лежат в одном файле 1Cv8.1CD, и запись в него идёт напрямую из процесса Конфигуратора. Если процесс снят посреди сжатия или реструктуризации, файл может остаться в несогласованном состоянии.

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

  1. Убедитесь, что никто не работает с базой и процессов 1cv8.exe на компьютерах не осталось.
  2. Скопируйте 1Cv8.1CD в отдельную папку — до любых исправлений. Это ваша страховка, если утилита сделает хуже.
  3. Запустите утилиту проверки физической целостности chdbfl.exe. Она лежит в папке установленной платформы: C:\Program Files\1cv8\<номер версии>\bin\.
  4. Укажите путь к 1Cv8.1CD. Сначала запустите проверку без флажка «Исправлять обнаруженные ошибки».
  5. Если ошибки найдены — повторите с этим флажком.
  6. Откройте базу в Конфигураторе и снова запустите тестирование и исправление, но только с нужными этапами.

Используйте chdbfl.exe той же версии платформы, на которой работает база. Утилита из другой версии может не понять формат файла.

Если и после chdbfl.exe база не открывается, верните последнюю резервную копию. Копия файла из шага 2 пригодится для попыток восстановления данных отдельно.

Ключи командной строки: запуск с ограничением времени и продолжением

Лучший способ не попадать в ситуацию «надо остановить» — запускать проверку пакетно, с лимитом времени. Для этого у 1cv8.exe есть режим /IBCheckAndRepair с параметрами:

КлючЧто делает
-ReIndexРеиндексация таблиц
-LogIntegrityПроверка логической целостности
-LogAndRefsIntegrityЛогическая и ссылочная целостность
-RecalcTotalsПересчёт итогов
-IBCompressionСжатие таблиц
-RebuildРеструктуризация таблиц
-TestOnlyТолько проверка, без исправлений
-BadRefCreate / -BadRefClear / -BadRefNoneБитые ссылки: создать объекты, очистить, не менять
-BadDataCreate / -BadDataDeleteЧастично потерянные данные объектов: создать или удалить
-TimeLimit:hhh:mmОграничение времени выполнения
-UseStartPointПродолжить с места, где прервалась прошлая проверка

Пример ночного запуска для клиент-серверной базы:

"C:\Program Files\1cv8\<номер версии>\bin\1cv8.exe" DESIGNER ^
  /S "srv1c\buh_base" /N "Администратор" /P "пароль" ^
  /IBCheckAndRepair -LogAndRefsIntegrity -RecalcTotals -BadRefNone ^
  -TimeLimit:003:00 -UseStartPoint ^
  /Out "D:\logs\check_buh.log" /DisableStartupDialogs

Для файловой базы вместо /S "сервер\база" укажите /F "D:\Bases\Buh".

Как это работает на практике: проверка идёт не больше трёх часов и аккуратно останавливается сама. На следующую ночь тот же запуск с -UseStartPoint продолжит с сохранённой точки. Ни Диспетчер задач, ни KILL не нужны.

💡 В окне режима в Конфигураторе актуальных версий платформы есть такие же настройки: ограничение по времени и продолжение прерванной проверки. Если ограничения нет, обновите платформу.

Как избежать зависаний при тестировании и исправлении

Большинство «зависаний» — это не сбой, а неправильно выбранный набор этапов для размера базы.

  • 🎯 Ставьте только нужные флажки. Если ругается на итоги — запускайте пересчёт итогов, а не все шесть этапов разом.
  • 🔍 Сначала режим «Только проверка». Он покажет масштаб проблем без изменений в базе. Решение об исправлении принимайте по его протоколу.
  • 🗄️ Клиент-серверная база: обслуживание силами СУБД. Перестроение индексов и обновление статистики дешевле делать регламентными заданиями MS SQL или PostgreSQL. Тестирование и исправление оставьте для логических ошибок.
  • 💾 Место на диске. Сжатие и реструктуризация создают копии таблиц. Держите свободного места не меньше размера базы.
  • 🛡️ Антивирус. Исключите из проверки папку файловой базы и папки данных СУБД. Проверка на лету замедляет запись в разы.
  • 🧪 Копия для экспериментов. На большой базе сначала прогоните режим на копии. Время выполнения на копии покажет, укладываетесь ли вы в ночное окно.
  • ⏱️ Окно обслуживания. Включите блокировку начала сеансов в консоли кластера или в конфигурации (в БП 3.0: Администрирование → Обслуживание → Блокировка работы пользователей), чтобы утром никто не упёрся в монопольный режим.

Перед любым запуском тестирования и исправления с исправлением ошибок нужна свежая резервная копия: выгрузка в .dt, копия 1Cv8.1CD или бэкап средствами СУБД.

Если база не открывается после прерванной проверки

Бывает, что после снятия процесса Конфигуратор пишет об ошибке формата потока или повреждении данных.

  1. Для файловой базы — пройдите chdbfl.exe, как описано выше.
  2. Запустите тестирование и исправление с флажками «Проверка логической целостности» и «Реиндексация таблиц». Это быстрые этапы.
  3. Если ошибка остаётся — очистите кэш клиента: запустите 1С с параметром /ClearCache или удалите папки кэша базы в %APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8.
  4. Если не помогло — восстановите резервную копию и повторите проверку на копии, с ключом -TimeLimit.

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

Сохранятся ли исправления, если прервать проверку на середине?
Частично. Уже зафиксированные изменения остаются, незавершённая операция откатывается. Поэтому после прерывания повторите тот этап, на котором остановились.
Можно ли работать в базе, пока идёт тестирование и исправление?
Нет. Режим требует монопольного доступа: пользователи не подключатся, пока проверка не закончится или не будет прервана.
Почему после снятия процесса пишет, что монопольный режим установить нельзя?
В клиент-серверной базе в кластере остался сеанс Конфигуратора или фонового задания. Удалите его в консоли кластера. В файловой — проверьте открытые файлы на сервере с папкой базы.
Как понять, сколько осталось до конца проверки?
Точного процента режим не показывает. Для клиент-серверной базы ориентир даёт percent_complete в MS SQL. Для прогноза прогоните проверку на копии базы.
Что безопаснее: прервать проверку или дождаться?
Если идёт реструктуризация или сжатие и диск активен — дождаться. Если работа стоит на чтении или пересчёте итогов без признаков активности — прервать и запустить заново с меньшим набором этапов.