Тестирование базы зависло: как остановить его и не потерять данные
Содержание
Запустили «Тестирование и исправление» перед обновлением, ушли на обед, вернулись, а индикатор стоит на одном месте уже три часа. Знакомая картина. Прервать проверку можно, но способ зависит от того, где лежит база и на каком этапе завис процесс.
Коротко: сначала пробуйте штатную остановку в окне проверки, потом закрывайте сеанс Конфигуратора, и только в последнюю очередь убивайте процесс. После любого жёсткого прерывания базу нужно проверить заново, а при необходимости вернуть из копии.
Прежде чем что-то прерывать, убедитесь, что есть свежая копия базы. Если её нет, скопируйте файл 1Cv8.1CD или сделайте выгрузку на уровне СУБД до любых действий. Прерванная реструктуризация может оставить таблицы в промежуточном состоянии.
Сначала решите: процесс завис или просто работает долго
Не каждая «зависшая» проверка действительно зависла. Реиндексация и сжатие таблиц на базе в 50-100 ГБ спокойно идут несколько часов. Убивать такой процесс незачем.
Признаки того, что проверка работает:
- 🟢 Процесс
1cv8.exeнагружает процессор или диск (в диспетчере задач колонка «ЦП» или «Диск» не нулевая). - 🟢 Размер файла базы или лога СУБД меняется.
- 🟢 В окне проверки периодически появляются новые строки.
Признаки того, что процесс встал:
- 🔴 Нагрузка на процессор и диск нулевая уже минут 20-30.
- 🔴 Размер базы не меняется, новых строк нет.
- 🔴 Окно не отвечает на клик, в заголовке «(не отвечает)».
- 🔴 В клиент-серверном варианте сеанс висит на ожидании блокировки.
Если нагрузка есть, подождите. Для оценки: ориентировочно 1 ГБ файловой базы проверяется минут 5-15 на обычном SSD и в несколько раз дольше на HDD. База в 20 ГБ на жёстком диске вполне может крутиться полдня.
Способы остановки, от мягкого к жёсткому
| Способ | Когда применять | Риск |
|---|---|---|
| Кнопка остановки в окне проверки | Окно отвечает | Минимальный |
| Закрытие окна Конфигуратора | Кнопки нет или она не работает | Небольшой |
Диспетчер задач, завершение 1cv8.exe | Окно не отвечает | Средний, нужна повторная проверка |
| Завершение сеанса в консоли кластера | Серверная база | Средний |
KILL сеанса в SQL | Сеанс 1С не завершается | Повышенный, возможен долгий откат |
Идите сверху вниз и переходите к следующему способу, только если предыдущий не сработал.
Что именно вы прерываете: этапы проверки и цена остановки
В окне запуска можно отметить несколько операций, и от них зависит, насколько опасна остановка.
| Этап | Что делает | Если прервать посреди |
|---|---|---|
| Реиндексация таблиц | Перестраивает индексы | Индекс перестроится при следующем запуске, данные целы |
| Проверка логической целостности | Ищет нарушения внутренней структуры | Ничего не меняет, безопасно |
| Проверка ссылочной целостности | Ищет ссылки на несуществующие объекты | Безопасно, пока не выбрано удаление или обнуление ссылок |
| Пересчёт итогов | Заново считает остатки и обороты | Итоги останутся частично старыми, повторите пересчёт |
| Сжатие таблиц | Уменьшает размер базы | Самый долгий и рискованный этап: нужна копия |
| Реструктуризация таблиц | Перестраивает физическую структуру | Прерывать нежелательно, возможна порча структуры |
Если вы видите в окне, что идёт именно сжатие или реструктуризация, десять раз подумайте, прежде чем снимать задачу. Тут лучше дождаться конца, особенно если нагрузка на диск не падает.
Записывайте, на каком этапе остановились. Это пригодится при повторном запуске: этапы, которые прошли чисто, можно не отмечать снова и сократить время проверки.
Остановка из интерфейса Конфигуратора
Проверка запускается из Конфигуратора: меню Администрирование → Тестирование и исправление информационной базы. После запуска открывается окно с ходом работы.
- Если в окне хода выполнения есть кнопка остановки, нажмите её и подождите. Платформа должна завершить текущую операцию и корректно закрыть транзакцию. Это может занять несколько минут.
- Если кнопки нет или ничего не происходит минут 10, попробуйте закрыть окно проверки обычным крестиком.
- Когда и это не помогло, закройте сам Конфигуратор. Платформа спросит подтверждение или сообщит, что операция выполняется. Согласитесь на завершение.
Не жмите кнопки подряд по нескольку раз. Повторные команды на завершение иногда превращают штатную остановку в зависание окна, и потом приходится идти в диспетчер задач.
Режим «Только тестирование» безопаснее прерывать, чем «Тестирование и исправление»: в нём платформа ничего не меняет в данных. Если вы запускали именно тест без исправлений, жёсткое завершение процесса обычно проходит без последствий для данных.
Принудительное завершение через диспетчер задач
Сюда переходят, когда окно побелело и на клики не реагирует.
- Откройте диспетчер задач (
Ctrl+Shift+Esc). - На вкладке «Подробности» найдите процессы
1cv8.exe. Их может быть несколько: Конфигуратор, обычные клиенты, фоновые задания. - Определите нужный. Подсказка: Конфигуратор обычно держит больше памяти и именно он нагружает диск при проверке. Сомневаетесь, посмотрите путь к файлу и командную строку, добавив столбец «Командная строка» (правый клик по заголовку столбцов).
- Правый клик → «Снять задачу».
Если на сервере терминалов работают другие пользователи, у каждого свой 1cv8.exe. Завершить чужой процесс значит оборвать чужую работу и потерять несохранённые документы. Сверяйте имя пользователя в столбце «Пользователь».
После снятия задачи в файловой базе остаётся служебный файл блокировки рядом с 1Cv8.1CD. Обычно 1С сама его убирает при следующем запуске. Если база пишет, что она занята, а пользователей нет, проверьте, не остался ли в диспетчере «зомби» 1cv8.exe, и только потом удаляйте файл блокировки 1Cv8.cdn вручную. Делать это при живых процессах нельзя.
Консоль, командная строка и PowerShell
Когда нужен автоматизм или нет доступа к графической оболочке (удалённый сервер, сессия по SSH), всё то же самое делается из консоли.
Список процессов 1С и кто их запустил:
Get-Process 1cv8 | Select-Object Id, StartTime, CPU, WorkingSet
Завершение конкретного процесса по номеру:
Stop-Process -Id 4812 -Force
То же в командной строке:
tasklist /fi "imagename eq 1cv8.exe" /v
taskkill /pid 4812 /f
Не используйте taskkill /im 1cv8.exe /f без нужды: команда убьёт все клиенты 1С на машине сразу.
Если проверку запускали пакетно (ключ командной строки DESIGNER с параметром проверки и исправления информационной базы), процесс запущен из bat-файла или планировщика. Тогда остановите сначала задачу в планировщике, иначе она запустит проверку снова:
schtasks /end /tn "Проверка базы 1С"
Название задачи подставьте своё.
Серверная база: сеансы кластера
В клиент-серверном режиме Конфигуратор подключён к кластеру серверов 1С. Убийство клиентского 1cv8.exe на рабочем месте не всегда мгновенно освобождает серверную часть: рабочий процесс rphost может ещё какое-то время доделывать операцию.
Порядок такой:
- Откройте консоль администрирования кластера, раздел «Информационные базы» → ваша база → «Сеансы».
- Найдите сеанс типа «Конфигуратор» (название приложения совпадает с названием режима) и посмотрите, что он делает: в колонке видны объём вызовов и время выполнения.
- Завершите сеанс. В консоли это пункт «Удалить» в контекстном меню сеанса.
То же через утилиту rac:
rac session --cluster=<идентификатор кластера> list --infobase=<идентификатор базы>
rac session --cluster=<идентификатор кластера> terminate --session=<идентификатор сеанса>
Идентификаторы выводит команда rac cluster list и rac infobase summary list.
Если сеанс не пропадает, посмотрите соединения (раздел «Соединения» в консоли). Иногда сеанс уже закрыт, а соединение с рабочим процессом висит. Его можно прервать отдельно.
Если база стоит в режиме «Установлена блокировка сеансов», после остановки не забудьте её снять, иначе пользователи не зайдут.
Если процесс держит SQL-сервер
Бывает, что сеанс 1С уже удалён, а на SQL-сервере запрос продолжает работать: реиндексация и сжатие выполняются самой СУБД. Посмотреть активные запросы можно так (для MS SQL Server):
EXEC sp_who2;
В выводе ищите строку с вашей базой, у которой в колонках CPU и DiskIO растут значения, а Command показывает операцию над индексом или таблицей.
Остановка запроса:
KILL 57;
где 57 номер сеанса (SPID). Проверить, как идёт откат, можно командой:
KILL 57 WITH STATUSONLY;
Тут главное правило: не перезапускайте службу SQL Server в надежде ускорить откат. После перезапуска сервер всё равно будет откатывать незавершённую транзакцию при старте базы, и пока он этого не сделает, база будет недоступна. Откат большой реиндексации может занимать столько же времени, сколько шла сама операция, а иногда и дольше. Дайте ему закончиться.
Ещё два замечания:
- 📌 Если в SQL нет активных запросов, но база в статусе «В восстановлении» или «Подозрительная», это уже не вопрос остановки проверки. Подозрительную базу восстанавливают из резервной копии.
- 📌 Журнал транзакций при прерванной реиндексации может сильно вырасти. Следите за свободным местом на диске с логом, чтобы не получить остановку сервера из-за нехватки места.
Проверка и восстановление после аварийной остановки
Жёстко прерванная проверка всегда оставляет вопрос: цела ли база. Минимальный порядок действий:
Дальше смотрите на результат повторного теста:
Для файловой базы есть ещё один приём. Если в папке с базой после аварийного прерывания появились лишние служебные файлы, не удаляйте ничего, кроме файла блокировки, и только когда процессов 1С нет. Всё остальное оставьте на месте до окончания проверки.
Не публикуйте базу пользователям, пока не прошла повторная проверка. Если ошибки данных обнаружатся после того, как за день введено 300 документов, откатываться придётся уже с их потерей.
Как не попадать в такую ситуацию
Большинство экстренных остановок можно предотвратить заранее.
- 🕐 Запускайте проверку в нерабочее время и закладывайте запас: время последней проверки умножьте на два.
- 💾 Перед каждым запуском проверки с исправлением делайте копию базы . Это правило без исключений.
- 🔌 Отключите на машине спящий режим и автоматическое обновление Windows с перезагрузкой.
- 📊 Для больших баз сначала запустите «Только тестирование». Если ошибок нет, исправлять нечего, и вы сэкономили часы.
- 🚫 Не запускайте проверку на рабочем месте через удалённый рабочий стол, который отключается по тайм-ауту. Сеанс закроется, а Конфигуратор оборвётся посередине.
- 🧹 Если проверка периодически зависает на одном и том же этапе, это сигнал: возможно, в базе есть повреждённая таблица, и дело не в самом тесте.