Каждый системный администратор или разработчик 1С рано или поздно сталкивается с ситуацией, когда при попытке обновить конфигурацию, восстановить базу из резервной копии или выполнить тестирование и исправление (удобно через обработка тестирования и исправления базы без монопольного режима), система выдает критическую ошибку: «Ошибка исключительной блокировки информационной базы». Самое загадочное в этой ситуации — список активных пользователей в «Конфигураторе» или « консоли кластера» может быть абсолютно пуст. Рассмотрим подробно, почему так происходит, и разберем по шагам все методы решения этой проблемы для различных режимов работы базы данных.
Прежде чем переходить к радикальным мерам вроде перезагрузки серверов, давайте проанализируем ситуацию. Исключительная блокировка требуется 1С для того, чтобы гарантировать целостность структуры данных. Если хотя бы один процесс имеет открытое соединение с базой, монопольный доступ невозможен. Проблема в том, что «процессом» может быть не только живой пользователь с открытым окном программы. Выясним основные причины:
1Cv8.1CD.Если вы работаете в клиент-серверном варианте, первым делом обратимся к консоли кластера. Рассмотрим, как правильно очистить соединения. Часто администраторы смотрят только в раздел «Соединения», но этого недостаточно.
Разберем алгоритм действий в консоли:
Проанализируем ситуацию с фоновыми процессами. В современных конфигурациях (на базе БСП) огромное количество задач выполняется в фоне: отложенное проведение, загрузка валют, очистка кэша, полнотекстовый поиск.
Для гарантированного отключения фоновых заданий выполним следующие действия:
Если манипуляции с консолью 1С не помогают, выясним причину на уровне системы управления базами данных. Бывает, что процесс rphost уже закрыл соединение, но SQL Server продолжает считать транзакцию открытой (состояние Sleeping с открытой транзакцией).
Рассмотрим, как найти и «убить» такие процессы через SQL Server Management Studio (SSMS):
Откроем новый запрос и выполним стандартную процедуру мониторинга:
EXEC sp_who2;
-- Или более современный вариант
SELECT * FROM sys.dm_exec_sessions WHERE database_id = DB_ID('Имя_Вашей_Базы');
Проанализируем колонку dbname. Если мы видим процессы, подключенные к нашей базе, обратим внимание на их SPID (идентификатор процесса). Чтобы принудительно разорвать соединение, используем команду:
KILL 54; -- Где 54 - это найденный SPID
Также полезно проверить наличие незавершенных транзакций, которые могут блокировать таблицы метаданных:
DBCC OPENTRAN('Имя_Вашей_Базы');
Если команда вернула информацию об открытой транзакции, ее также следует завершить через KILL соответствующего сеанса.
В файловом режиме блокировка часто вызывается внешними факторами. Посмотрим, что может удерживать файлы базы данных .1CD, .1CL и .1CC.
Если база опубликована на веб-сервере (IIS), то процесс веб-сервера (обычно это w3wp.exe) постоянно держит открытый дескриптор к файлу базы. Рассмотрим действия для исправления:
iisreset /stop в командной строке от имени администратора) или просто остановим конкретный пул приложений в диспетчере служб IIS.1Cv8.1cl в папке с базой. Это файлы блокировок. Если база закрыта, а они остались — их нужно удалить вручную. Если система пишет «Файл занят другим процессом», значит, кто-то все еще держит базу.1cv8.exe. Иногда после аварийного завершения окно программы исчезает, но процесс остается в памяти и продолжает удерживать файл.Если никакие точечные методы не помогают, перейдем к более масштабным действиям. Иногда причиной блокировки является некорректное состояние самого «Агента сервера 1С:Предприятие».
Разберем по шагам процедуру правильного перезапуска:
rphost, rmngr и ragent завершились. Если нет — завершаем их принудительно.C:\Program Files\1cv8\srvinfo).reg_1541 (номер порта может отличаться) найдем папки с именами-идентификаторами баз (UID). Внутри этих папок можно смело удалять содержимое папки snaccnt.dat и временные файлы, но будьте осторожны: не удаляйте файлы конфигурации самого кластера (1CV8Reg.lst).Интересный случай из практики: блокировка может быть вызвана окном авторизации. Если пользователь запустил 1С, дошел до ввода логина и пароля и оставил это окно висеть, в списке активных пользователей в «Предприятии» его еще нет, а в консоли сеанс уже может удерживать определенные ресурсы.
Проанализируем командную строку процессов. В диспетчере задач на вкладке «Подробности» добавим колонку «Командная строка». Там можно увидеть путь к базе данных, которую пытается открыть зависший процесс 1cv8.exe. Это поможет вычислить конкретного «виновника» на терминальном сервере.
Мы рассмотрели все основные способы борьбы с ошибкой исключительной блокировки. Подведем итог: всегда начинайте с самого простого — проверки сеансов в консоли и установки блокировки регламентных заданий. Если это не помогает, переходите к анализу процессов СУБД или блокировок файловой системы.
Важный совет: Чтобы в будущем такие ситуации возникали реже, настройте в параметрах кластера 1С автоматическое завершение спящих сеансов — для этого есть утилита принудительного завершения сеансов 1С. Установите Время засыпания и Время завершения спящего сеанса в разумные пределы (например, 1200 и 600 секунд соответственно). Это позволит серверу самостоятельно «вычищать» брошенные подключения, освобождая базу для монопольных операций.