При попытке выполнить выгрузку информационной базы в файл .dt администраторы часто сталкиваются с ошибкой исключительной блокировки. Ситуация осложняется тем, что в списке активных пользователей может быть пусто, а конфигуратор все равно «упрямится». Разберем подробно, почему так происходит, как найти «призрачные» соединения и какие инструменты использовать для гарантированного решения проблемы.
Первым делом проанализируем ситуацию в консоли «Администрирование серверов 1С Предприятия». Распространенная ошибка новичков — смотреть только в раздел Сеансы. Однако для платформы 1С существует принципиальное различие между логическим сеансом пользователя и физическим соединением с рабочим процессом rphost.
Бывают случаи, когда пользователь некорректно завершил работу (например, закрыл терминальную сессию крестиком), его сеанс исчез из списка, но соединение осталось висеть в кластере. Это соединение продолжает удерживать блокировки в СУБД и файловой системе сервера. Посмотрим, как это исправить:
Иногда штатное удаление соединения через консоль не срабатывает. В этом случае выясним, в каком рабочем процессе «застряло» соединение. В свойствах соединения можно увидеть номер PID рабочего процесса. Если в этом процессе больше нет полезных соединений других баз, можно принудительно завершить процесс rphost.exe с этим PID через диспетчер задач Windows. Это мгновенно разорвет все зависшие связи и позволит конфигуратору получить монопольный доступ.
Если даже после перезапуска процессов проблема сохраняется, проанализируем состояние папки кластера 1С. Часто причиной блокировок становится «мусор» во временных файлах, которые хранят информацию о текущих транзакциях и блокировках. Эти данные располагаются в папке srvinfo (обычно это C:\Program Files\1cv8\srvinfo).
Особое внимание стоит уделить подпапкам, чье имя начинается на snccntx. Там хранятся данные сеансов. Если запись в них прошла со сбоем, сервер может ошибочно считать базу занятой. Рассмотрим надежный алгоритм полной очистки сервера, который рекомендуется выполнять с помощью bat-файла.
Для ежедневных регламентных работ, когда нужно гарантированно подготовить базу к выгрузке, лучше всего использовать скрипт. Разберем по шагам, что должен делать такой скрипт:
rphost, rmngr и ragent, если они не закрылись сами.snccntx..pfl и очистка системного временного каталога.Рассмотрим пример такого скрипта для 64-разрядного сервера:
set SERVICE_1C_NAME="1C:Enterprise 8.3 Server Agent (x86-64)"
set CNTX_PATH="C:\Program Files\1cv8\srvinfo\reg_1541"
set PFL_PATH="C:\ProgramData\1C\1cv8"
echo Останавливаем службу сервера...
sc stop %SERVICE_1C_NAME%
timeout 5
echo Убиваем зависшие процессы...
taskkill /f /im "rphost.exe"
taskkill /f /im "rmngr.exe"
taskkill /f /im "ragent.exe"
echo Чистим временные файлы сеансов и кэш...
DEL /Q /F /S %CNTX_PATH%\snccntx*
DEL /Q /F %PFL_PATH%\*.pfl
echo Запускаем службу...
sc start %SERVICE_1C_NAME%
Проанализируем ситуацию, описанную в теме: работа ведется в терминале, и подключено торговое оборудование (кассы). Принудительное выкидывание пользователя через консоль 1С может быть недостаточно, так как терминальная сессия пользователя остается в состоянии Disconnected. При этом запущенное в ней приложение 1С может продолжать удерживать соединение с базой.
В конфигурациях типа «Альфа-Авто» или решениях на базе БСП часто используется обработка ожидания, которая проверяет флаг блокировки. Если вы хотите «мягко» выгнать пользователей, рекомендуется использовать параметры командной строки 1С. Рассмотрим этапы правильной подготовки к выгрузке:
ENTERPRISE с параметром /UC <код доступа> для установки блокировки новых соединений.ЗавершитьРаботуСистемы(Ложь, Ложь) в обработчике ожидания, чтобы дать пользователю завершить кассовую смену.CONFIG.Важно понимать техническую суть процесса. Выгрузка в .dt — это логическое сжатие данных. Платформа последовательно читает таблицы и записывает их в свой внутренний формат. Если в базе SQL есть физические повреждения таблиц (битые индексы), выгрузка может пройти успешно, а вот загрузить такой файл обратно часто не удается.
Для клиент-серверных баз настоятельно рекомендуем использовать средства СУБД (SQL Server Management Studio или аналоги) для создания бэкапов в формате .bak. Это происходит быстрее, не требует монопольного доступа в режиме конфигуратора (в большинстве случаев) и гарантирует физическую целостность данных.
Выгрузку же в .dt стоит оставить только для специфических задач, таких как перенос базы с SQL в файловый вариант или при миграции между разными СУБД (например, с MS SQL на PostgreSQL).
Если вам «не дает» сделать выгрузку:
Диспетчер задач -> Пользователи (особенно те, что в статусе «Отключен»).snccntx.